2012-11-16 34 views
1

如何將JavaScript對象傳遞到ASP.NET處理程序並解析值?Javascript對象傳遞給ASP.NET處理程序

我創建像一個複雜的對象類型:

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爲NULL。

回答

5

爲了通過你應該序列化到一個字符串的服務器來獲取對象(你可以使用的方法描述here或包括JSON JavaScript庫here),然後使用.NET JavaScriptSerializer類反序列化。

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; 
} 
3

jQuery不會爲您自動爲對象創建字符串。你必須自己做。

下載此:https://github.com/douglascrockford/JSON-js

腳本引用添加到您的HTML和改變你的$.post呼籲:

$.post("/Handlers/AccountHandler.ashx", { obj: JSON.stringify(aView, null, 2) }... 

也將contentType不正確。我只是把它作爲默認值。雖然您將以這種方式提交JSON數據,但ContentType本身不是JSON。內容類型將是常規發佈數據。這是發佈數據:

obj={"Username":"MyUsername", "Password":"MyPassword"... 

這是JSON

{"obj":{"Username":"MyUsername", "Password":"MyPassword"... 

它可以得到一種混亂的時候。

更好的方法是查看ASP.Net MVC。該控制器方法都能夠自動反序列化JSON對象爲淨車型,所以你可以做到這一點在你的客戶端代碼:

$.post("/Handlers/AccountHandler.ashx", JSON.stringify({ view: aView }, null, 2) }... 

寫。匹配aView的結構網類:

class Account { 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 
} 

,然後定義控制器的方法,像這樣:

public JsonResult SaveAccount(Account view) 

使事情變得簡單了很多。 :)

+0

更簡單,但對於仍然只運行在.NET 2.0上的差項目,juan.facorro的解決方案是一個可行的解決方案。 – SwissCoder

相關問題