C# 传递给ASP.NET处理程序的Javascript对象
如何将JavaScript对象传递到ASP.NET处理程序并解析值 我创建了一个复杂类型的对象,如:C# 传递给ASP.NET处理程序的Javascript对象,c#,javascript,asp.net,json,httphandler,C#,Javascript,Asp.net,Json,Httphandler,如何将JavaScript对象传递到ASP.NET处理程序并解析值 我创建了一个复杂类型的对象,如: function AccountObjCreate() { var AccountsView = {}; AccountsView.Username = null; AccountsView.Email = null; AccountsView.Password = null; return AccountsView; } var aView = AccountObjCreate(); aV
function AccountObjCreate() {
var AccountsView = {};
AccountsView.Username = null;
AccountsView.Email = null;
AccountsView.Password = null;
return AccountsView;
}
var aView = AccountObjCreate();
aView.Username = $('#tbUserName').val().trim();
aView.Email = $('#tbEmail').val().trim().toLowerCase();
aView.Password = $('#tbPassword').val().trim();
然后像这样填充该对象:
function AccountObjCreate() {
var AccountsView = {};
AccountsView.Username = null;
AccountsView.Email = null;
AccountsView.Password = null;
return AccountsView;
}
var aView = AccountObjCreate();
aView.Username = $('#tbUserName').val().trim();
aView.Email = $('#tbEmail').val().trim().toLowerCase();
aView.Password = $('#tbPassword').val().trim();
那么我打电话:
$.post("/Handlers/AccountHandler.ashx", { obj: aView },
function (results) {
if (results.isSuccess) {
alert(results.msg);
} else {
alert(results.msg);
}
}, "json");
当我在控制台中查看它时,我看到aView中的所有数据都是json
我的ASP.NET处理程序页是
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
string obj = context.Request["obj"];
但是obj为空。为了将对象传递到服务器,应该将其序列化为字符串(可以使用所述方法或包含javascript的JSON库),然后使用.NET
JavaScriptSerializer
类对其进行反序列化
public class AccountsView {
public string Username;
public string Email;
public string Password;
}
public void ProcessRequest(HttpContext context)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string value = context.Request["obj"];
var aView = serializer.Deserialize(value, typeof(AccountsView));
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
}
JS代码
var data = {
obj: JSON.stringify(aView)
};
$.post("/Handlers/AccountHandler.ashx", data, function(results) {
if (results.isSuccess) {
alert(results.msg);
} else {
alert(results.msg);
}
}, "json");
然后在服务器处理程序上,您可以使用前面提到的JavaScriptSerializer
类解析JSON字符串
public class AccountsView {
public string Username;
public string Email;
public string Password;
}
public void ProcessRequest(HttpContext context)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string value = context.Request["obj"];
var aView = serializer.Deserialize(value, typeof(AccountsView));
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
}
jQuery不会自动为您字符串化对象。你必须自己做 下载此文件: 将脚本引用添加到HTML并更改
$。将调用发布到:
$.post("/Handlers/AccountHandler.ashx", { obj: JSON.stringify(aView, null, 2) }...
ContentType也不正确。我会把它作为默认设置。虽然您将以这种方式提交JSON数据,但ContentType本身不是JSON。内容类型将是常规post数据。这是post数据:
obj={"Username":"MyUsername", "Password":"MyPassword"...
这是JSON
{"obj":{"Username":"MyUsername", "Password":"MyPassword"...
有时会让人困惑
更好的方法是研究ASP.NETMVC。控制器方法能够自动将JSON对象反序列化为.Net模型,因此您可以在客户端代码上执行此操作:
$.post("/Handlers/AccountHandler.ashx", JSON.stringify({ view: aView }, null, 2) }...
编写一个与aView结构匹配的.Net类:
class Account {
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
然后定义一个控制器方法,如下所示:
public JsonResult SaveAccount(Account view)
使事情简单得多。:) 更简单,但对于仍然只在.NET2.0上运行的糟糕项目,juan.facorro的解决方案是可以采用的。