在Asp.Net中隐式地向控制器发送Ajax请求

时间:2016-09-07 15:04:21

标签: c# jquery asp.net ajax

我的表格有很多输入:

<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 个答案:

答案 0 :(得分:0)

基于 mayk的答案,它让我知道如何解决它,我写了简单的解决方案:

$.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...
}

将表单序列化为

ffmpeg -i in.wav out.ogg

Javascript对象,然后将viewmodel发送到您的控制器,再次返回此viewmodel。返回的viewmodel仅适用于具有相应名称的表单中的每个输入。