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

时间:2009-09-09 12:11:34

标签: c# asp.net asp.net-mvc

如何让2个按钮和每个按钮执行不同的回发操作? 例如:

  1. 我想要button1提交 表格的内容。
  2. 我想要button2 从中显示一些数据 数据库没有存储什么 形式。
  3. 现在,由于我正在使用表单集合,因此两个按钮似乎都存储了数据。如何区分按钮?

    由于

4 个答案:

答案 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 ();
    }
}

然后你自己决定在这些行动中发生什么,保存数据或做其他事情。