如何让2个按钮和每个按钮执行不同的回发操作? 例如:
现在,由于我正在使用表单集合,因此两个按钮似乎都存储了数据。如何区分按钮?
由于
答案 0 :(得分:2)
您可以将每个按钮放在不同的表单中,并提供不同的操作句柄。像这样:
<% using (Html.BeginForm("/FirstAction")) {%>
<input type="submit" />
<% } %>
<% using (Html.BeginForm("/SecondAction")) {%>
<input type="submit" />
<% } %>
答案 1 :(得分:2)
您需要检查表单集合中是否存在相关的“提交”按钮,然后执行相关操作。
例如假设Button1&amp; Button2,你只想要一个表格
在接受POST
的控制器操作方法中public actionresult SomeMethod(FormCollection form)
{
if (form.AllKeys.Contains("Button1")
{
doSomething();
}
else // assuming only two submit buttons
{
doSomethingElse();
}
}
HTH,
丹
答案 2 :(得分:2)
只要表单不需要共享输入字段(文本框等),两种表单方法就可以了。如果他们需要共享,或者按钮彼此相邻(使表单以某种方式重叠),那么使用两种形式就会开始崩溃。
此外,我不太热衷于在控制器内调度,基于检测从FormCollection中单击了哪个按钮。调度方法会产生一个间接层,这使得事情变得不那么清楚:例如,你不能用AcceptVerbs来装饰你调度的方法。
相反,我们只是捕获JavaScript onclick事件并设置表单的操作。
<% using (Html.BeginForm("Save", "Contact"))
{ %>
<input type="submit" value="Save" />
<input type="submit" value="Find Similar" onclick="this.form.action = rootDir + 'Contact/Find'" />
<% }%>
答案 3 :(得分:1)
按钮不存储任何东西。按钮启动HTTP POST请求。
现在,如果您希望这些POST命中不同的控制器操作,您需要将它们分成两种不同的形式,并指定两种不同的表单URL。
<% BeginForm ("/action1"); %>
<input type="submit" value="Action1" />
<% EndForm ();
<% BeginForm ("/action2"); %>
<input type="submit" value="Action2" />
<% EndForm ();
然后,您需要将这些路由映射到两个不同的控制器操作(在Global.asax中):
routes.MapRoute(
"Action1",
"/action1",
new { controller = "Test", action = "PostAction1" });
routes.MapRoute(
"Action2",
"/action2",
new { controller = "Test", action = "PostAction2" });
您的控制器正在等待这些操作:
public class TestController : Controller
{
[AcceptVerbs (HttpVerbs.Post)]
public ActionResult PostAction1 (FormCollection form)
{
// Do something
return View ();
}
[AcceptVerbs (HttpVerbs.Post)]
public ActionResult PostAction2 (FormCollection form)
{
// Do something
return View ();
}
}
然后你自己决定在这些行动中发生什么,保存数据或做其他事情。