MVC asp.net:提交多个表单

5
当在视图中提交一个表单时,如何读取或让控制器读取同一页中另一个表单中的数据?

1
它是否在单个<FORM>标签内? - Ian P
4个回答

10

当您使用浏览器提交表单时,它只会发送 <form></form>中的字段数据。无论您使用何种后端技术,如ASP.net、MVC.net、PHP、Python等,这一点都是正确的。

我实际上只能想到两个选项:

  1. 像WebForms那样只需在整个页面周围放置一个 <form>,然后根据按下的按钮对结果进行排序。
  2. 使用Javascript / AJAX收集任何所需数据,并以任何希望的方式进行推送。您甚至可以实时执行其中一些操作(例如当复选框被选中时),而不会导致页面回传。

当然,每种方法都有其利弊,但这就是问题的本质。


1
谢谢你的分享。它帮助我掌握了如何使用asp.net mvc处理数据输入的方法。 - MikeJ

2
您可以通过使用Ajax和Javascript在客户端完成此操作...
<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> 

1

不行。如果您有要提交的页面信息,必须将其与提交的表单一起包含。但是,您可以使用JavaScript在提交时从一个表单复制信息到下一个表单。


0
        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代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接