【发布时间】:2014-09-02 03:11:32
【问题描述】:
我们正在尝试通过一次 Ajax (jQuery) 调用向 ASP 应用程序发送多个表单。
我们使用以下 jQuery 代码:
var formContainer = {
Form1 : form1.serialize(),
Form2 : form2.serialize()
}
$.ajax({
type: "POST",
url: '@Url.Action("CreateModel", "Controller")',
data: formContainer,
success: function (result) { }
});
在服务器上,我们在 Request.Form 属性中收到以下内容:
Key : Value
Form1 : All serialized form elements for Form1
Form2 : All serialized form elements for Form2
通常我们使用以下方法,因此 ASP 会自动创建具有正确属性值的对象:
public ActionResult CreateModel(ClassForForm1 obj)
但是由于这两个表单是一起发送的,modelbinder 无法绑定和构建类。 因此,对于此操作,我们希望模型构建器使用 Request.Form["Form1"] 中的值。
我们不能使用自定义模型绑定器,因为我们使用外部库(DevExpress,他们在此之上编写了自己的实现)。
我们正在使用 MEF 框架来添加功能(这些功能作为表单添加到视图中)。出于这个原因,我们不知道对后端有什么期望。所以写封装 ViewModel 是不行的。
处理其他表单数据的功能将在其他模块中处理。
欢迎任何解决方案!
提前致谢。
【问题讨论】:
-
当您说“因此,对于此操作,我们希望模型构建器使用 Request.Form["Form1"] 中的值。”您本质上希望该请求忽略 Form2 值?还是你想在请求中为每个表单调用CreateModel,这样如果发送3个表单,CreateModel执行3次,每个表单执行一次?
-
是的,我们想像你说的那样“忽略” Request.Form["Form2"] 中的值。
-
我尝试更改自定义模型绑定器中的 Request.Form 值,但它正在从 IUnvalidatedprovider 读取值。虽然这是此页面上的最后一个代码(在静态函数中):blogs.taiga.nl/martijn/2011/09/29/…。但我找不到如何改变那个值。这就是我自己发现的,当然欢迎其他解决方案:)。
标签: javascript jquery ajax asp.net-mvc model-binding