MVC asp.net:提交多个表单

时间:2009-01-20 01:32:06

标签: asp.net-mvc forms

从视图提交一个表单时,如何在同一页面中读取或让控制器以另一种形式读取数据?

4 个答案:

答案 0 :(得分:10)

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

我能想到的唯一两个选择是:

  1. 像WebForms一样,只需放置一个< form>在整个页面周围,然后根据按下的按钮对结果进行整理。
  2. 使用Javascript / AJAX收集您喜欢的任何数据,并以您喜欢的方式进行推送。您甚至可以实时执行此操作(例如选中复选框时)并且不会导致页面回发。
  3. 当然,每个人都有利有弊,但这就是野兽的本性。

答案 1 :(得分: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> 

答案 2 :(得分:1)

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

答案 3 :(得分: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代码。