2013-08-19 91 views
1

我已經試過落實選項this article.多個不同的一種形式提交按鈕

public class HttpParamActionAttribute : ActionNameSelectorAttribute 
{ 
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) 
    { 
     if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase)) 
      return true; 

     if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase)) 
      return false; 

     var request = controllerContext.RequestContext.HttpContext.Request; 
     return request[methodInfo.Name] != null; 
    } 
} 

我控制器操作說明:

[HttpParamAction] 
[HttpPost] 
public virtual ActionResult EditAccouncement(_AccouncementPostViewModel m) 

[HttpParamAction] 
[HttpPost] 
public virtual PartialViewResult DeleteAnnouncement(int id) 

我的形式:

@using (Ajax.BeginForm("Action", ajaxOptions: new AjaxOptions() 
    { 
     HttpMethod = "POST", 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "announcement" + @Model.id 
    })) 
{ 
      //form values omitted 
      <button type="submit" class="submitbutton" name="edit">Change details</button> 
      <button type="submit" class="submitbutton" name="delete">Delete</button> 
} 

然而,控制器操作被調用仍然只是Action方法(不存在)。我錯過了什麼嗎?

+0

如果您的按鈕具有「值=‘

+0

根據示例,應將操作方法​​重命名爲編輯和刪除以匹配按鈕上的名稱。 –

回答

1

您的問題是由您的操作名稱和按鈕名稱屬性之間的不匹配造成的。

你的按鈕的name屬性的值必須與動作的名稱,就像這樣:

<button type="submit" name="EditAccouncement">Change details</button> 
<button type="submit" name="DeleteAnnouncement">Delete</button> 

更新:我會建議不同的方法都在一起。這個解決方案對我來說似乎是反直覺的,並不是特別容易遵循。

通過將兩個不同的事件處理程序連接到按鈕,您可以輕鬆使用JavaScript(例如jquery)來處理表單「手動」提交。一個事件會使POST進入EditAccouncement(打字錯誤!)操作,並且會發出一條POST到DeleteAnnouncement操作。

我做了一個的jsfiddle樣機這表明代碼:http://jsfiddle.net/wmWNj/3/

更新2:固定錯別字的jsfiddle

+0

當然啊!非常感謝! –

+0

查看我的更新,瞭解其他方法 – havardhu

相關問題