簡體   English   中英

Javascript對象傳遞給ASP.NET 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM