Asp.net mvc 根据单击的提交按钮,将表单发布到不同的MVC post操作
我使用的是Asp.net mvc 根据单击的提交按钮,将表单发布到不同的MVC post操作,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我使用的是ASP.NETMVC4。我在一个视图上有多个按钮。。目前我正在调用相同的操作方法;我使用名称属性来区分单击的按钮 @using (Html.BeginForm("Submit", "SearchDisplay", new { id = Model == null ? Guid.NewGuid().ToString() : Model.SavedSearch }, FormMethod.Post)) { <div class="leftSideDiv">
ASP.NETMVC4
。我在一个视图上有多个按钮。。目前我正在调用相同的操作方法;我使用名称
属性来区分单击的按钮
@using (Html.BeginForm("Submit", "SearchDisplay", new { id = Model == null ? Guid.NewGuid().ToString() : Model.SavedSearch }, FormMethod.Post))
{
<div class="leftSideDiv">
<input type="submit" id="btnExport" class="exporttoexcelButton"
name="Command" value="Export to Excel" />
</div>
<div class="pageWrapperForSearchSubmit">
<input type="submit" class="submitButton"
value="Submit" id="btnSubmitChange" />
</div>
}
问题
您可以使用ajax调用调用不同的方法,而无需回发
$.ajax({
type: "POST",
url: "@(Url.Action("Action", "Controller"))",
data: {id: 'id', id1: 'id1' },
contentType: "application/json; charset=utf-8",
cache: false,
async: true,
success: function (result) {
//do something
}
});
对我来说,这听起来像是一个有两个输出的命令,我会选择在客户端和服务器中对此进行更改 在客户端,使用JS构建您想要发布到的URL(为了简单起见,使用JQuery),即 您可以设置两个不同的操作
public ActionResult SubmitExcel(SearchCostPage model)
{
...
}
public ActionResult Submit(SearchCostPage model)
{
...
}
或者您可以使用ActionName
属性作为别名
public ActionResult Submit(SearchCostPage model)
{
...
}
[ActionName("SubmitExcel")]
public ActionResult Submit(SearchCostPage model)
{
...
}
您可以根据浏览器支持的不同,以不同的方式选择必须发布表单的url(从而选择调用的操作):
- 对于支持HTML5的较新浏览器,您可以使用
- 对于不支持此功能的旧浏览器,您需要在单击按钮时以及提交之前使用一些JavaScript来更改
Url
extensions方法来指定表单操作
对于支持HMTL5的浏览器:只需如下定义提交按钮:
<input type='submit' value='...' formaction='@Url.Action(...)' />
<input type='submit' data-form-action='@Url.Action(...)' value='...'/>
注意:此脚本将处理页面中具有type=submit
和数据表单操作
属性的任何元素的单击。当发生这种情况时,它将获取数据表单操作
属性的值,并将包含表单的操作设置为该属性的值。由于它是一个委托事件,因此它甚至可以用于使用AJAX加载的HTML,而无需采取额外的步骤
然后,您只需将带有所需操作URL的数据表单操作
属性添加到按钮,如下所示:
<input type='submit' value='...' formaction='@Url.Action(...)' />
<input type='submit' data-form-action='@Url.Action(...)' value='...'/>
请注意,单击按钮会更改表单的操作,然后浏览器会将表单发布到所需的操作
如您所见,这不需要自定义路由,您可以使用标准的
Url
扩展方法,在现代浏览器中也没有什么特别的事情可做。最佳答案1:
中提到的ActionNameSelectorAttribute
答案2
参考:
第二种方法
添加用于处理“取消”按钮单击的新表单。现在,单击“取消”按钮,我们将发布第二个表单并重定向到主页
第三种方法:客户端脚本
<button name="ClientCancel" type="button"
onclick=" document.location.href = $('#cancelUrl').attr('href');">Cancel (Client Side)
</button>
<a id="cancelUrl" href="@Html.AttributeEncode(Url.Action("Index", "Home"))"
style="display:none;"></a>
取消(客户端)
我需要一个完整的回复JS将允许您预处理您的提交请求,但这并不意味着您仍然无法获得完整的回复。我已经发布了一个答案。我编辑了您的问题标题以使其更准确,并添加了一个简单、有效的答案(在我的一些项目中进行生产).为什么不按多重提交按钮呢?a la可能会有帮助。恐怕不行。这是我自己做的。请尝试一下,如果您有任何疑问,请写一篇评论,我将帮助您改进我的答案。虽然我认为这个工具包非常清晰,你们很快就会使用它。你们能同时使用这两种方法来支持多个浏览器吗?或者您必须选择其中一个?JavaScript解决方案支持旧浏览器和新浏览器,前提是JavaScript未被禁用。同时使用这两种技术(这是可能的)还将涵盖禁用JavaScript的HTML5兼容浏览器的情况。
<input type='submit' data-form-action='@Url.Action(...)' value='...'/>
<button name="ClientCancel" type="button"
onclick=" document.location.href = $('#cancelUrl').attr('href');">Cancel (Client Side)
</button>
<a id="cancelUrl" href="@Html.AttributeEncode(Url.Action("Index", "Home"))"
style="display:none;"></a>