一般情况下,是否可以在同一表单中使用两个不同的按钮发布到ASP.NET MVC中的不同控制器操作?
我基本上试图在同一个表单中有两个输入(type =“button”)标签,但我希望它们执行不同的控制器操作。我想在一些情况下这样做,因为我认为它提供了一个良好的美学,能够点击按钮而不是超链接。有没有办法做到这一点,还是应该以不同的方式设计?
答案 0 :(得分:9)
不使用Javascript真的不可能。使用Javascript,您只需定义调用正确操作的不同点击处理程序。
$(function() {
$('#button1').click( function() {
$(form).attr( 'action', '<% Url.Action( "action1" ) %>' )
.submit();
return false; // prevent default submission
});
$('#button2').click( function() {
$(form).attr( 'action', '<% Url.Action( "action2" ) %>' )
.submit();
return false; // prevent default submission
});
});
答案 1 :(得分:1)
关于在浏览器中处理此问题的一些想法:
答案 2 :(得分:1)
如果你想要的就是OK&amp;取消按钮,然后查看this post by David Findley。
我在编辑视图中使用此方法,其中我有一个编辑按钮和一个删除按钮。删除按钮仅需要项目的ID。在下面的代码中,您可以看到我已将我的属性命名为“AcceptFormValueAttribute”。这种方法对我有好处,因为我的删除[Get]操作只显示要求确认的消息,因此需要重定向。
[ActionName("Edit")]
[AcceptFormValue(Name = "Action", Value = "Delete")]
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public ActionResult EditDelete(int? id)
{
return RedirectToAction("Delete", new { id = id });
}
答案 3 :(得分:0)
这与ASP.NET MVC无关,但与html无关。我看到你如何做到这一点的唯一方法是通过检查提交表单时使用javascript修改表单标签的action属性,方法是检查按下了哪个按钮。
答案 4 :(得分:0)
有几种方法可以解决这个问题。假设您没有使用按钮发送数据,请单击“我选择3”。如果必须包含数据,则考虑使用某种临时数据存储(如TempData)的选项1。
input type="button"
并为其提供onclick处理程序
将用户重定向到控制器操作(最佳) 答案 5 :(得分:0)
没有试过这个,但是如果点击按钮的ID确实是通过http POST发送的,你可以做类似的事情:
<input type="submit" name="GO" ID="GO" value="GO BUTTON" />
<input type="submit" name="STOP" ID="STOP" value="STOP BUTTON" />
然后在mvc端,只有两个方法,一个带go参数,一个带stop参数。
答案 6 :(得分:0)
方法#1
如何使用两个不同的表单包装按钮,然后使用CSS定位其中一个,以便它(在视觉上)显示在“主”表单内?
一个非常简单的例子:
<fieldset id="CombinedForm"> <form ... action="Method1"> ...form stuff here... <input id="Button1" type="submit" value="Do something"> </form> <form ... action="Method2"> ...form stuff here... <input id="Button2" type="submit" value="Do something else"> </form> </fieldset>
...然后使用CSS如下:
#CombinedForm { position: relative; padding-bottom: 2em; /* leave space for buttons */ } #Button1, #Button2 { position: absolute; bottom: 0; } #Button1 { left: 0; } #Button2 { right: 0; }
结果应该是你有一个fieldset
或div
看起来像一个表单,里面有两个实际的HTML表单,两个按钮位于父框内,但仍然提交给不同的地点。
方法#2
另一种方法是:让两个按钮处于相同的形式,指向一个控制器动作,然后决定(根据点击按钮的值)重定向到哪个动作。
答案 7 :(得分:0)
不需要Javascript ......
这个怎么样
public ActionResult DoSomething()
{
//一些业务逻辑
TempData [“PostedFormValues”] = Request.Form;
if(Request.Form(“ButtonA”)!= null)
{
返回RedirectToAction(“ActionA”,RouteData.Values);
}
返回RedirectToAction(“ActionB”,RouteData.Values);
}
答案 8 :(得分:0)
我认为我可以提出更简单的建议。
例如,您有两个按钮:ButtonA,ButtonB,并希望执行不同的操作 对每一个采取行动。 最简单的解决方案是:只使用BeginForm语句:
@using ( Html.BeginForm("ButtonA" , "Home") )
{
<input type="submit" value="ButtonA"/>
}
@using ( Html.BeginForm("ButtonB" , "Home") )
{
<input type="submit" value="ButtonB" />
}
您还必须在家庭控制器中声明ButtonA,ButtonB操作:
[HttpPost]
public ActionResult ButtonA()
{ . . . }
[HttpPost]
public ActionResult ButtonB()
{ . . . }