[c#]向 Asp.Net 中隐式控制器发送 Ajax 请求

标签: Asp.net jQuery ajax C#
发布时间: 2017/2/25 3:25:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有大量的输入窗体︰

<input type="text" id="SomeName1" name="SomeName1" />
<input type="text" id="SomeName2" name="SomeName2" />
etc...

所有这些投入是我 viewmodel 的一部分︰

public class MyViewModel
{
    public string SomeName1 { get; set; }
    public string SomeName2 { get; set; }
    //etc...
}

我需要刷新所有这些输入,而无需刷新整个页面,所以我需要使用 Ajax 请求。然而问题是,我们需要显式在 Javascript 中定义 viewmodel 发送它通过 jquery.ajax ,像这样︰

var viewModel = 
{
    SomeName1: $("#SomeName1").val(),
    //etc...
}
var request = $.ajax({
    url: '@Url.Action("UpdateAction", "SomeController")',
    type: "POST",
    cache: false,
    data: viewModel,
    datatype: "json"
})
request.done(function (data) {
    $("#SomeName1").val(data.SomeName1);
    //etc...                                   
})

所以,还有大量的复制粘贴代码,这是很难编辑和支持。

我不想显式发送数据,喜欢在示例中,从所有的输入,然后显式设置为所有那输入新数据。

这该怎么办?

解决方法 1:

基于mayk 的答案,这给了我的想法我怎么解决它,我已经写了简单的解决方案︰

var viewModel = $("#myFormId").serializeObject();
var request = $.ajax({
    url: '@Url.Action("UpdateAction", "SomeController")',
    type: "POST",
    cache: false,
    data: viewModel,
    datatype: "json"
})
request.done(function (data) {
       $.each(data, function (key, value) {
           $("#myFormId) input[name=" + key + "]").val(value);
       });                               
})

地点︰

$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

序列化到窗体

var viewModel = 
{
    SomeName1: $("#SomeName1").val(),
    //etc...
}

Javascript 对象,然后发送 viewmodel 到您的控制器,再返回此视图模型。返回的 viewmodel 简单地适用于每个输入形式与相应的名称。

赞助商