我正在研究小型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方法,我需要找出哪个调用方法。
谢谢你们 干杯
答案 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”?