提交后停止部分表单重定向?

时间:2014-03-03 00:10:30

标签: c# asp.net-mvc forms asp.net-mvc-4 partial-views

我有一个包含两个部分视图的视图:

Both.cshtml

<div id="first">
    @Html.Partial("~/Views/Example/_FirstForm.cshtml")
</div>
<div id="second">
    @Html.Partial("~/Views/Example/_SecondForm.cshtml")
</div>

每个部分只包含一个不同的形式,每个形式执行不同的动作。

_FirstForm.cshtml

@using (Html.BeginForm("First", "Example", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))

... form stuff

_SecondForm.cshtml

@using (Html.BeginForm("Second", "Example", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))

... form stuff

问题:

当我提交上述表单之一时,我想调用表单操作(FirstSecond),但保持在我调用它的同一页面上(在这种情况下{{1 }})。

目前,如果我提交第一张表格,我需要Both.cshtml,这不存在,我得到404.第二种形式相同,但是/Example/First

我打算在其他页面上也使用这些部分View表单,所以我不想只返回/Example/Second。我只是希望调用该动作,并且要显示部分特征的完整View("Both.cshtml");

有谁知道我能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:0)

我可以想到两个选择:

  1. 当提交Both上的两个表单中的一个时,您将点击One或Two操作方法。在这些方法中,重定向回两个
  2. Ajax提交表单:这会将数据发送回服务器上的操作方法,您可以(根据您的需要)发送一些标记重新绘制表单内容,或者只是发回一些Json表示成功/失败
  3. 根据您的评论,选项2看起来像这样:

    var postForm = function(formId) {
        var $form = $('#' + formId);
        var action = $form.attr('action');
        var postBody = $form.serialize();
    
        $.post(action, postBody).done(function(data) {
            // do something with any data you may have returned from the server
            // could be html markup, could simply be a success/error flag
        });
    }
    

    这将允许您序列化您的任何一个表单并提交正确的操作而不刷新您的页面。重要的是要注意,从你的第一/第二个动作返回的任何结果都将出现在.done调用的'data'参数中。

答案 1 :(得分:0)

在这种情况下,不要在任何部分中使用submitt按钮类型...因为它将从post执行而不是使用Jquery来验证按下哪个按钮并提交该表单..

例如

<form name= "form1" id ="form1" action ="abc.php" method="post">
<input type ="button" id="mybutton" value ="Submitt">
</form> 

** * ** * *** java脚本 * ** * ** * ** * ** < EM> * ***

$("#mybutton").click(function() {
            $('#form1').submit();
});

问候

shaz