【问题标题】:how to check which event caused the post back in asp.net mvc application如何在asp.net mvc应用程序中检查哪个事件导致回发
【发布时间】:2010-12-12 13:44:32
【问题描述】:
我的 ASP.net MVC 应用程序中有一个视图和一个控制器。
我的视图中有一个“提交”按钮和一个“取消”按钮。
当我点击下面的任何一个按钮时,动作就会被触发。
AcceptVerbs(HttpVerbs.Post)
public ActionResult Result()
{
}
现在的问题是我如何在我的公共 ActionResult Result() 中知道回发是由于“提交”还是“取消”引起的??
【问题讨论】:
标签:
asp.net
asp.net-mvc
post
back
【解决方案1】:
你可以试试
function OnBeginRequest(sender, args) {
var postBackElement = args.get_postBackElement();
if ((postBackElement.id == '<%= btnSave.ClientID %>')
{
}
}
【解决方案2】:
您可以通过以下步骤解决问题:
我。在视图的表单中放置一个名为“取消”的隐藏字段。给它一个默认值false。
二。在取消按钮的 onclick 事件中,添加以下脚本:
document.getElementById('cancel').value = true; document.getElementById('myForm').submit();
将“myForm”更改为您的表单名称。
三。将 Result() 的方法签名更改为以下内容:
public ActionResult Result(bool cancel)
通过模型绑定,您的隐藏字段“取消”的值将可以在您的操作方法的签名中访问。
【解决方案3】:
感谢您的回答。
我得到的另一种解决方案是,
public ActionResult Result()
{
if (Request.Params.ToString().IndexOf("btnSubmit") > 0)
//
else
//
}
【解决方案4】:
我建议您的“取消”按钮不应该提交表单。有几种方法可以处理这个问题,但最简单的方法是在导航回上一页的按钮上设置一个 javascript onclick 事件。 (history.go(-1)) 如果这不能满足您的需求,您还可以指定要导航到的特定路线。最复杂的是拦截客户端的点击并决定要点击哪个路由,但我通常只在我想在表单上有多个提交按钮来点击不同的操作时才这样做,这是一种相当罕见的情况。