【问题标题】:MVC 3 Override Form Post-Action MethodMVC 3 覆盖表单后操作方法
【发布时间】:2012-06-16 06:11:29
【问题描述】:

缠绕在这个轴上。所以我在表单中有几个按钮

@using (Html.BeginForm("Edit", "RunLogEntry", FormMethod.Post, new { enctype = "multipart/form-data" }))
{

<input id="create" class="art-button" type="submit" value="Save" />
<input id="create" class="art-button" type="submit" value="Cancel" />    
}

我想要做的是当用户点击取消按钮时,它应该点击一个不同的动作方法,这与 开始形式。我可以在表单之外有取消按钮,但就是这样 不是一个选择,因为它的物理位置需要接近休息 表单的控件..或者我应该使用链接按钮而不是提交类型?对此有任何想法将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    如果您不需要在“取消”上发布任何数据,那么只需使用带有Html.ActionLink 方法的链接按钮,例如:

    @Html.ActionLink("Link Text", "MyAction", "MyController")
    

    您还可以使用 javascript 来更改表单的操作:

    document.myform.action ="/MyController/MyAction";
    

    ...这当然需要你用javascript处理取消按钮的点击事件

    【讨论】:

      【解决方案2】:

      正如musefan所说,你可以把它做成一个链接

      如果你想保留你的按钮,你将不得不在这个按钮上使用一些 jQuery。

      第一个解决方法是将“取消”按钮的 ID 更改为“取消”而不是“创建”(每个元素都应该有一个唯一的 ID)。

      <input id="cancel" class="art-button" type="submit" value="Cancel" />  
      

      那么你需要给“取消”按钮绑定一个单独的点击事件来调用不同的动作。

      $("#cancel").click(function(e) {
          e.preventDefault(); //Keep form from posting
          window.location.href = "REDIRECT URL";
      
          //If I want to post
          $.post("URL", data { ... });
      });
      

      【讨论】:

      • e.preventDefault();仍然回发到表单中的操作方法。我试图基本上发布到同一个控制器但不同的操作方法,这也不起作用。我正在这样做:windows.location.href = "RunLogEntry/Edit"
      • 它甚至没有点击 javascript 函数。嗯
      • 给出的代码在 jQuery 中,因此如果您的页面中没有包含该文件,那么它将无法工作。此外,您需要确保按建议重命名取消按钮。表单发布的原因是因为事件甚至没有被调用。
      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2013-02-04
      相关资源
      最近更新 更多