Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#类到Js类?_C#_Javascript_Jquery_Asp.net - Fatal编程技术网

c#类到Js类?

c#类到Js类?,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我有一个c#班的学生 我希望能够在我的js中做到: var p = new Person(); 稍后,我将通过jqueryajax向ashx发送p对象 哪些库(jQuery?xxx?)可以帮助我做到这一点 我知道Ajaxtookit有一个属性:ScriptService 但是我不确定这个解决方案有多好。使用,使用库将c#对象转换为json正确的做法是用JavaScript定义person原型 var Person = { someMethod: function () { },

我有一个c#班的学生

我希望能够在我的js中做到:

var p = new Person();
稍后,我将通过jqueryajax向ashx发送p对象

哪些库(jQuery?xxx?)可以帮助我做到这一点

我知道Ajaxtookit有一个属性:ScriptService


但是我不确定这个解决方案有多好。

使用,使用库将c#对象转换为json

正确的做法是用JavaScript定义person原型

var Person = {
  someMethod: function () {

  },
  someMoreMethods: function () {

  }
};
然后让C#服务器以JSON的形式发送其
Person
实例的序列化版本,在客户端上只有一个xhr处理程序

xhr.addEventListener("load", function () {
  var personJSON = JSON.parse(this.responseText);
  var personInstance = Object.create(Person);
  var person = extend(personInstance, personJSON);
});
这里,您将获取person的json数据,这些数据是所有属性。创建Person“class”的新原型实例,使该实例具有所有方法。然后使用通过JSON获得的数据/属性扩展实例

注意:您必须实现
extend
,一个简单的实现是

function extend(target, source) {
  Object.getOwnPropertyNames(source).forEach(function (name) {
    var pd = Object.getOwnPropertyDescriptor(source, name);
    Object.defineProperty(target, name, pd);
  });
  return target;
}

免责声明:示例代码使用ES5,请自己以合理的方式处理传统浏览器引擎。

您可以将ASPX PageMethods与jQuery结合使用。因此,通过定义模型开始服务器上的工作:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
然后,您可以在某些aspx页面(
/foo.aspx
)中定义页面方法:

最后调用此页面方法:

var p = {
    firstName: 'John',
    lastName: 'Smith'
};
$.ajax({
    url: '/foo.aspx/SavePerson',
    type: 'POST',
    contentType: 'application/javascript; charset=utf-8',
    data: JSON.stringify(p),
    success: function(result) {
        alert(result.d);
    }
});
这里演示的JSON.stringify方法是在现代浏览器中构建的。如果需要支持传统浏览器,可以将脚本包含到页面中


更新:

根据评论部分的要求,您可以设计一个通用ASHX处理程序来接收此请求,进行一些处理并返回JSON响应:

public class Foo : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var serializer = new JavaScriptSerializer();
        using (var reader = new StreamReader(context.Request.InputStream))
        {
            Person person = (Person)serializer.Deserialize<Person>(reader.ReadToEnd());
            // do some processing with the person

        }
        context.Response.ContentType = "application/json";

        var result = serializer.Serialize(new { data = "Hello World" });
        context.Response.Write(result);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

你是在使用WebForms还是MVC?你不会这么做的。你不能仅仅把一个C类移植到JavaScript中。您在中重新定义了“类”JavaScript@Raynos你错了。有这样的图书馆。我看到了-例如:scriptService属性。@RoyiNamir从C#自动生成javascript是一种生成平庸代码的好方法,这些代码会在边缘泄漏。正确操作。@RoyiNamir-您使用的是什么版本的.NET?如果您使用的是.NET 4,那么您可以使用新的
动态
关键字,例如。这只是将数据转换为JSON格式,不允许以任何方式在javascript中使用C#编写的类。它不允许发送,但这只是其中的一部分。我不使用aspx jus ashx,所以我没有webmethod attr。如何更改您的代码以使用ASHX文件?@RoyiNamir,用一个使用通用ASHX处理程序的示例更新了答案。为什么我无法在Request.form中看到值,而只能在context.Request.InputStream中看到值?(您是以post的形式发送的,为什么它没有在request.form中显示?@RoyiNamir,在本例中,我们直接将JSON请求发送到流中。没有Request.Form。如果要发送JSON请求,则不能使用此选项。如果不想发送JSON请求,请删除
JSON.stringify
调用。然后,您可以在处理程序中使用
Request[“FirstName”]
来获取单个属性。但是,如果你已经拥有了整个对象,为什么还需要这个呢
public class Foo : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var serializer = new JavaScriptSerializer();
        using (var reader = new StreamReader(context.Request.InputStream))
        {
            Person person = (Person)serializer.Deserialize<Person>(reader.ReadToEnd());
            // do some processing with the person

        }
        context.Response.ContentType = "application/json";

        var result = serializer.Serialize(new { data = "Hello World" });
        context.Response.Write(result);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
var p = {
    firstName: 'John',
    lastName: 'Smith'
};
$.ajax({
    url: '/foo.ashx',
    type: 'POST',
    data: JSON.stringify(p),
    success: function(result) {
        alert(result.data);
    }
});