[英]2 buttons in a view to perform different actions in asp.net mvc
我如何有2个按钮,每个按钮执行不同的回发操作? 例如 :
现在,自从我使用表单收集以来,两个按钮似乎都存储了数据。如何区分按钮?
谢谢
您可以将每个按钮设置为不同的形式,并使用不同的操作处理提交。 像这样:
<% using (Html.BeginForm("/FirstAction")) {%>
<input type="submit" />
<% } %>
<% using (Html.BeginForm("/SecondAction")) {%>
<input type="submit" />
<% } %>
您需要检查Form集合中是否存在相关的Submit按钮,并执行相关操作。
例如,假设Button1和Button2并且您只需要一种形式
在接受POST的控制器操作方法中
public actionresult SomeMethod(FormCollection form)
{
if (form.AllKeys.Contains("Button1")
{
doSomething();
}
else // assuming only two submit buttons
{
doSomethingElse();
}
}
高度
担
只要表单不需要共享输入字段(文本框等),两种表单方法就可以了。 如果它们需要共享,或者按钮要彼此相邻放置(以使表单以某种方式重叠),则使用两个表单会开始崩溃。
另外,基于检测从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'" />
<% }%>
按钮不存储任何内容。 按钮启动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 ();
}
}
然后,您可以决定自己希望执行这些操作,保存数据或执行其他操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.