表单中的取消按钮

16

我在一个表单中有一个取消按钮:

@using (Html.BeginForm("ConfirmBid","Auction"))
        {
          some stuff ...

                    <input type="image" src="../../Content/css/img/btn-submit.png" class="btn-form" />
                    <input type="image" src="../../Content/css/img/btn-cancel.png" class="btn-form" />

        }

我的问题是,当我点击该按钮时,我想让它跳转到特定的视图。我该如何做到这一点?

9个回答

29

你可以使用@Html.ActionLink帮助方法将取消按钮转换为锚标签,并应用一种CSS类,使该链接看起来像一个按钮,然后在该链接的控制器操作中,您可以返回特定的视图。

@Html.ActionLink("Cancel","Index","Products",null, new { @class="clsButtonFake"})

在表单中使用2个提交按钮,一个用于真正的提交,一个用于取消。在您的控制器动作中,检查哪个按钮调用了该动作方法。 您可以在此答案中了解更多信息。


7

很多答案在chrome或ie中的一个有效,但并不是全部都有效。

以下在所有浏览器中均有效 -

<input type="button" value="Cancel" onclick="location.href='@Url.Action("Index","Home")';"/>

4

这是我的按钮HTML代码:

<button type="button"
        class="btn btn-inverse"
        id="cancel"
        onclick="window.history.back()">
        <i class="icon-remove icon-large"></i>
        <br />@Localization.Cancel
</button>

然后,为了自定义某些视图中的 onclick 属性,我这样做:

<script>

    $(document).ready(function ()
    {
        $("#cancel").
            attr("onClick",
            "document.location.href='@Html.Raw(Url.Action("Index", "Standard",
             new { ManualId = Model.ManualId, ChapterId = Model.ChapterId }))'");
    });

</script>

什么是 Localization.Cancel? - Matthew Lock
2
请注意,如果表单重新加载(postback),window.history.back()将无法工作。它只会将您带回到表单的早期版本。 - Matthew Lock
@MatthewLock 这是来自 .resx 文件的本地化字符串。关于重新加载,你说得完全正确...它并不适用于所有情况,但没关系。 - Leniel Maccaferri

3

或者一个样式化的提交按钮:

<input type="submit" value="Save Form" name="Save" class="submit-button btn-form" /> 

然后是取消按钮的Javascript代码:
<input type="button" onclick="document.location.href('Home/Index')" value="Cancel" class="cancel-button btn-form" />
// Note: This avoids any of the validation that may happen in the model that 
// normally gets triggered with a submit

2

所以,使用Shyju的方法,您可以使用内置的MVC ActionLink帮助程序。这样做,您需要通过css对任何图像或图标进行处理。然而,这更具可缓存性,特别是如果您在css中使用base64字符串来处理图像。

我喜欢Adauto的方法,因为它可以更好地控制标记。MVC Html Helpers不错,但它们似乎仍然处于WebForms的心态中,“不用担心,我们会为您处理它”。

唯一需要添加的是Url.Content。

<a href="@Url.Action("CancelBid", "Auction")"><img src="@Url.Content("~/Content/css/img/btn-submit.png" class="btn-form" /></a>

让您的视图必须知道内容相对于其位置的位置并不是一个好主意。


谢谢!我专注于答案,忘记了其他的(Url.Content)。 - Adauto

2
<a href="/Auction/[ActionName]">
    <input type="image" src="@Url.Content("~/Content/css/img/btn-cancel.png")" class="btn-form" />
</a>

如果你想保留它作为按钮的外观,你可以像这样做:

<a href="/Auction/[ActionName]">
    <input type="button" value="Cancel">
</a>

其中[ActionName]是返回所需视图的操作名称。


1
<a href="@Url.Action("CancelBid", "Auction")"><img src="../../Content/css/img/btn-submit.png" class="btn-form" /></a>

0

最终我创建了一个帮助程序,以便可以重复使用取消按钮。我添加了一个 JavaScript 确认框,以防止人们在填写表单后意外点击取消按钮。

@helper FormCancelButton(string cancelUrl)
{
    <button type="button" class="btn" onclick="if (confirm('Cancel changes?')) location.href = '@cancelUrl';">Cancel</button>
}

然后我这样调用它:

@FormCancelButton(Url.Action("Index", "User" ))

如果你真的很热衷,你可以尝试检测表单的“脏”状态,只有在表单被更改过后才显示确认对话框。


-1
     <asp:Button runat="server" class="btn btn-danger"
       CausesValidation="false" onclick="Cancel_Click" Text="Cancel"/>


     protected void Cancel_Click(object sender, EventArgs e)
     {
        Response.Redirect("Test.aspx");
     }

这是Web表单,不是MVC。 - Niklas Wulff

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