![](/img/trans.png)
[英]In ASP.net C# how do I pass an argument from a Javascript function to the onclick handler
[英]Javascript Object pass to ASP.NET Handler
如何將JavaScript對象傳遞給ASP.NET Handler並解析值?
我創建了一個復雜類型對象,如:
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。
為了通過你應該序列化到一個字符串的服務器來獲取對象(可以使用所描述的方法在這里或包括JSON JavaScript庫在這里 ),然后使用.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;
}
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。 Controller方法能夠自動將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)
使事情變得簡單得多。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.