当在视图中提交一个表单时,如何读取或让控制器读取同一页中另一个表单中的数据?
当您使用浏览器提交表单时,它只会发送 <form></form>中的字段数据。无论您使用何种后端技术,如ASP.net、MVC.net、PHP、Python等,这一点都是正确的。
我实际上只能想到两个选项:
当然,每种方法都有其利弊,但这就是问题的本质。
<SCRIPT language="JavaScript">
function submitforms()
{
new Ajax.Request(formUrl,
{
parameters: $H({param1:value,param2:value}).toQueryString(),
method: 'post',
onSuccess: function(transport) {
document.myform.submit();
}
}
}
</SCRIPT>
不行。如果您有要提交的页面信息,必须将其与提交的表单一起包含。但是,您可以使用JavaScript在提交时从一个表单复制信息到下一个表单。
var formData1 = $("#form1").serializeObject();
var formData2 = $("#form2").serializeObject();
$.extend(formData1, formData2);
var formData = JSON.stringify(formData1);
$.ajax({
type: "POST",
url: "@Url.Action("MyAction", "MyController")",
data: formData,
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (data) {
...Do something with the data
},
error: function(result) {
...Handle the error
}
});
然后在您的控制器端(我使用MVC,但WebAPI可能会起到相同的作用),您可以声明两个与客户端模型匹配的单独参数,一切都将为您解决,前提是您没有重叠的属性名称!当魔法发生时,您一定会喜欢它!
public ActionResult MyAction(FormDataModel1 formData1, FormDataModel2 formData2)
感谢https://github.com/macek/jquery-serialize-object提供的serializeObject代码。