我的表格有很多输入:
<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...
})
因此,有很多复制粘贴代码,很难编辑和支持。
我不希望从所有输入中显式发送数据(如示例),然后将新数据显式设置为所有输入。
我该怎么办?
答案 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仅适用于具有相应名称的表单中的每个输入。