三个按钮从Controller中调用相同的Action方法 - 确定调用哪个方法

时间:2017-06-19 20:19:48

标签: javascript c# asp.net-mvc razor view

我正在研究小型MVC应用程序,在我的View上, 有3个按钮,所有这些按钮都调用相同的Action,这里是按钮的定义:

<button type="submit" class="btn btn-success pull-right" id="btnSave" value="tabOne"><i class="fa fa-save"></i> Submit changes </button>

并且有三个这样的,我怎么知道哪一个调用了一个方法,因为它们位于三个独立的TABS上,每个提交的标签(保存更改)都需要重定向到另一个视图,这就是原因为什么我需要识别哪个按钮调用了我的[HttpPost] Edit操作方法..

这就是我正在调用的方法:

[HttpPost]
public ActionResult Edit(ArticleEditViewModel model)
{
  if (ModelState.IsValid)
  {
//Rest of some code
//Here I need to determine which button called this method so I can redirect user //to a corresponding view, for example 
    if(button1 invoked me)
    {
       return RedirectToAction("Edit", "Article");
    }
    else if(button 2 invoked me)
    {
       return RedirectToAction("Index", "Article");
    }
}

所以那些人几乎都是,我有标签控件,3个按钮提交相同的Action方法,我需要找出哪个调用方法。

谢谢你们 干杯

3 个答案:

答案 0 :(得分:1)

为具有不同值的按钮提供name属性

<button type="submit" name="clickedFrom" id="btnSave" value="tabOne" >Tab one</button>
<button type="submit" name="clickedFrom" id="btnSave2" value="tabTwo" >Tab Two</button>

并将参数添加到具有相同名称的http post action方法

[HttpPost]
public ActionResult Edit(ArticleEditViewModel model,string clickedFrom)
{
   // to do : Check value of clickedFrom and do something
   // to do : return something
}

提交表单后,浏览器会在请求正文中的clickedFrom键中发送单击按钮的值

答案 1 :(得分:0)

在您的事件处理程序中,您将传递event作为参数,以获取与发生的事件相关的特定信息。您要查找的具体属性为Event.target

// Taken from Event.target MDN, this will hide the caller of the event
$("#btnSave").click(function(event) {
    event.target.style.visibility = 'hidden';
});

我使用jQuery绑定事件是为了简洁,它和vanilla JS之间的区别在这个例子中是疏忽的

答案 2 :(得分:0)

除非您通过javascript传递参数,否则我认为不可能。

为什么不直接传递value属性“tabOne”,“tabTwo”或“tabThree”?