繁体   English   中英

视图中的2个按钮可在asp.net mvc中执行不同的操作

[英]2 buttons in a view to perform different actions in asp.net mvc

我如何有2个按钮,每个按钮执行不同的回发操作? 例如 :

  1. 我希望button1提交表单的内容。
  2. 我希望button2可以显示数据库中的某些数据而不存储表单中的内容。

现在,自从我使用表单收集以来,两个按钮似乎都存储了数据。如何区分按钮?

谢谢

您可以将每个按钮设置为不同的形式,并使用不同的操作处理提交。 像这样:

<% 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM