我如何有2个按钮和每个按钮来执行不同的回发操作? 例如:2个按钮在视图中执行不同的操作在asp.net mvc
- 我想Button1以提交表单的 内容。
- 我希望button2 能够显示 数据库中的某些数据,而不会在 表单中存储什么内容。
现在,由于即时通讯使用表单集合,这两个按钮似乎存储的数据。如何区分按钮?
谢谢
我如何有2个按钮和每个按钮来执行不同的回发操作? 例如:2个按钮在视图中执行不同的操作在asp.net mvc
现在,由于即时通讯使用表单集合,这两个按钮似乎存储的数据。如何区分按钮?
谢谢
您需要检查表单集合中是否存在相关的Submit按钮并执行相关操作。
例如,假设Button1的& Button2的,你只需要在控制器的操作方法一种形式
接受POST
public actionresult SomeMethod(FormCollection form)
{
if (form.AllKeys.Contains("Button1")
{
doSomething();
}
else // assuming only two submit buttons
{
doSomethingElse();
}
}
HTH,
丹
按钮不存储任何东西。按钮启动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();
}
}
然后你决定自己想要在这些行为上发生什么,保存数据或做其他事情。
您可以将每个按钮放在不同的表单中,并具有不同的提交操作。像这样:
<% using (Html.BeginForm("/FirstAction")) {%>
<input type="submit" />
<% } %>
<% using (Html.BeginForm("/SecondAction")) {%>
<input type="submit" />
<% } %>
两个形式的做法是好的只要表单不需要共享输入字段(文本框等)即可。如果他们需要分享,或者按钮要彼此相邻放置(以使表单以某种方式重叠),那么使用两种表单就会开始分解。
此外,我不喜欢在控制器内调度,基于检测哪个按钮已被点击从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'" />
<% }%>