【问题标题】:Stop partial form redirect after submission?提交后停止部分表单重定向?
【发布时间】:2014-04-03 20:05:24
【问题描述】:

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

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),但保持在我调用它的同一页面上(在本例中为 Both.cshtml)。

目前,如果我提交第一个表单,它会将我带到 /Example/First,它不存在并且我得到一个 404。第二个表单也是如此,但 /Example/Second

我还计划在其他页面上使用这些部分视图表单,所以我不想只返回View("Both.cshtml");。我只希望调用该操作,并使用与显示部分功能相同的完整 View()

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

【问题讨论】:

  • 首先,您可以使用 Ajax.BeginForm 通过 Ajax 提交部分表单。但是,听起来您希望提交任一表单以实际发布到不同的操作?
  • @BrendanGreen 是的,我希望各自的表单触发 First 和 Second 操作,而不是尝试转到这些不存在的 /Example/First 和 /Example/Second 页面
  • 首先..修复你的段落词汇,这对我来说毫无意义..问题是什么以及你试图实现的目标......
  • @Shaz 我在同一个视图中使用多个局部视图。每个局部视图都包含一个表单。当我提交该表单时,我想调用表单操作,但留在我调用它的同一页面上。

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


【解决方案1】:

我能想到两个选择:

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

根据您的评论,选项 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 调用的“数据”参数中。

【讨论】:

  • 1.这很好,但是如前所述,我也会在其他页面上使用部分,所以它不能是 Both.cshtml 特定的。 2.我会尝试调查一下,但我对此了解不多
  • 啊...我误解了你的意思。我以为你只是在重用视图,而不是 Action。
  • 除了在提交时不重定向到 First/Second 之外,您是否需要根据服务器的响应更改页面上的任何内容,或者您​​本质上不想在页面上进行任何更改?
  • 只要它执行动作,例如在我的控制器中调用 'First' 或 'Second',什么都不做也没关系,因为控制器动作有我需要的所有东西
【解决方案2】:

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

例如

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

*********java脚本************* ***

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

问候

沙兹

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 2023-04-03
    • 2011-05-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2013-04-13
    相关资源
    最近更新 更多