2009-12-28 39 views
2

我有一個具有相同值的多個提交按鈕的單一表單。例如:「繼續」。ASP.Net MVC - 提交具有相同值的按鈕

現在,在ASP.Net MVC的後控制器方法中,我怎麼知道哪個按鈕被按下?

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DepartmentDetails(string submitButton) 

submitButton的值將始終爲「繼續」。我如何知道哪個按鈕被按下。

我已爲每個按鈕提供了單獨的ID。

謝謝。

+0

你具有相同值的兩個按鈕,但你希望他們做不同的事情?這不會混淆用戶嗎?給按鈕賦予不同的值有什麼問題? – DOK 2009-12-28 17:23:58

+2

'ID'無關緊要,'Name'是最重要的。那是不同的價值?這聽起來像可能有一個簡單的方法來尋找你想要的東西。提供更多的細節可能會有幫助。 – 2009-12-28 17:30:47

+0

請發佈您的HTML。 – 2009-12-28 17:39:01

回答

4

試試這個:

<% using (Html.BeginForm()) 
    { %> 
    <input type="submit" value="Submit" name="Submit1Button" /> 
    <input type="submit" value="Submit" name="Submit2Button" /> 
<%} %> 

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(FormCollection values) 
    { 
     string buttonName = values.AllKeys.Where((n) => n.EndsWith("Button")).SingleOrDefault(); 
     return View(); 
    } 

} 
+0

謝謝。有用。 – 2009-12-29 05:39:33

2

,豈不更有意義,打破你的頁面分爲兩個不同的形式?

然後,您可以使用Html.BeginForm HtmlHelper方法的參數爲每個表單指定不同的Controller(s)Action方法。

0

我意識到這個問題是古老的,但只是碰到它,所以認爲我會回答!

這就是我們使用:

/// <summary> 
/// Attribute for Controller methods to decide whether a particular button 
/// was clicked and hence whether the method can handle the action. 
/// </summary> 
public class IfButtonClickedAttribute : ActionMethodSelectorAttribute 
{ 
    private readonly IEnumerable<string> _buttonNames; 

    public IfButtonClickedAttribute(params string[] buttonNames) 
    { 
     _buttonNames = buttonNames; 
    } 

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    { 
     if (controllerContext.HttpContext.Request.HttpMethod != "POST") 
      return false; 

     foreach (string buttonName in _buttonNames) 
     { 
      //this first test is for buttons or inputs that have the actual name specified 
      if (controllerContext.HttpContext.Request.Form[buttonName] != null) 
       return true; 
     } 

     return false; 
    } 
} 

然後你的行動你去:

[ActionName("SaveItem"), IfButtonClicked("SaveAsDraft")] 
public ActionResult SaveAsDraft(){ ... } 

[ActionName("SaveItem"), IfButtonClicked("SaveAsPublished")] 
public ActionResult SaveAsPublished(){ ... }