2009-09-09 77 views
1

我如何有2个按钮和每个按钮来执行不同的回发操作? 例如:2个按钮在视图中执行不同的操作在asp.net mvc

  1. 我想Button1以提交表单的 内容。
  2. 我希望button2 能够显示 数据库中的某些数据,而不会在 表单中存储什么内容。

现在,由于即时通讯使用表单集合,这两个按钮似乎存储的数据。如何区分按钮?

谢谢

回答

2

您需要检查表单集合中是否存在相关的Submit按钮并执行相关操作。

例如,假设Button1的& Button2的,你只需要在控制器的操作方法一种形式

接受POST

public actionresult SomeMethod(FormCollection form) 
{ 
    if (form.AllKeys.Contains("Button1") 
    { 
    doSomething(); 
    } 
    else // assuming only two submit buttons 
    { 
    doSomethingElse(); 
    } 
} 

HTH,

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

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

2

您可以将每个按钮放在不同的表单中,并具有不同的提交操作。像这样:

<% using (Html.BeginForm("/FirstAction")) {%> 
    <input type="submit" /> 
<% } %> 

<% using (Html.BeginForm("/SecondAction")) {%> 
    <input type="submit" /> 
<% } %> 
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'" /> 
<% }%> 
相关问题