2010-11-05 65 views
0

我建立一個搜索視圖在asp.net MVC 2在HttpPost方法中,我如何計算出哪個表單按鈕被點擊?

所以我必須:

public ActionResult Search() 
{ 
    ... 
} 


[HttpPost] 
public ActionResult Search(string input, FormCollection formValues) 
{ 
    ... 
} 

的問題在視圖中有一個文本框和兩個按鈕「搜索」和「清除結果」 。

一旦輸入[HttpPost]方法,我該如何確定哪個按鈕已被點擊? (所以我可以改變搜索&顯示邏輯) - 或者這是否必須是鏈接?

+0

http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in-asp-net-mvc-framework – Equiso 2010-11-05 01:01:09

回答

3

復位形式。

用於表單提交按鈕。使用type =「reset」作爲重置按鈕。

否則,使用JavaScript來連接重置按鈕。

2

如果這些按鈕是INPUT標籤,並且您已將它們分配給「名稱」值,則它們將被重新發送回您的FormCollection。你會在你的數組中看到「buttonName」=「value」。只需檢查收集的適當的關鍵,你就會知道哪些被按下。

另一種方法是在窗體中隱藏輸入,當用戶點擊按鈕「A」時,在隱藏輸入中填充一個值。如果用戶點擊按鈕「B」,則在輸入中輸入不同的值。當你回到服務器時,只需檢查隱藏輸入的值。

3

我已經開發了這個小巧的ActionMethodSelectorAttribute

public class AcceptParameterAttribute : ActionMethodSelectorAttribute 
{ 
    public string Name { get; private set; } 

    public AcceptParameterAttribute(string name) 
    { 
     Name = name; 
    } 

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    { 
     HttpRequestBase req = controllerContext.HttpContext.Request; 
     return req.Form[Name] != null; 
    } 
} 

您可以使用此對您的操作,如在客戶端這

[HttpPost] 
[AcceptParameter("submitBtnName")] 
public ActionResult Search() 
相關問題