2013-09-16 42 views
0

我一直在尋找很好的技巧來處理表單中的多個提交按鈕,然後我從這個URL獲得了一些建議,我跟着但失敗。 How do you handle multiple submit buttons in ASP.NET MVC Framework?處理表單中的多個提交按鈕

發貼者@Andrey Shchekin。

他只是說創建一個類,像下面的一個,所以我沒有在同一個控制器視圖中的樣子&也控制代碼的樣子

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

那麼多提交按鈕下方

<% using (Html.BeginForm("Action", "Post")) { %> 
    <!— …form fields… --> 
    <input type="submit" name="saveDraft" value="Save Draft" /> 
    <input type="submit" name="publish" value="Publish" /> 
<% } %> 

and controller with two methods 

public class PostController : Controller { 
    [HttpParamAction] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult SaveDraft(…) { 
     //… 
    } 

    [HttpParamAction] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Publish(…) { 
     //… 
    } 
} 

但當我測試他的代碼時,它永遠不會工作。所以任何人都可以告訴我我犯了什麼錯誤,或者代碼本身對於處理這種情況是錯誤的。謝謝

回答

3

查看:

<input type="submit" name="mySubmit" value="Save Draft" /> 
<input type="submit" name="mySubmit" value="Publish" /> 

控制器動作:

[HttpPost] 
public ActionResult ActionName(ModelType model, string mySubmit) 
{ 
    if(mySubmit == "Save Draft") 
    { 
     //save draft code here 
    } else if(mySubmit == "Publish") 
    { 
     //publish code here 
    } 
} 
1

當我有要求用戶可以完成或保存醫院嬰兒記錄的進度時,我必須處理類似的情況 - 基本上這兩個操作都提交了,但是一個操作確認了插入主DB表和另一個操作的記錄將其保存到臨時表中而不進行任何驗證。我這樣處理它:

我有2個按鈕都是類型提交不同的ID(btnSave和btnFinalize)。當btnSave點擊我截取了一些JQuery的代碼事件:

$("#btnSave").click(function() { 
    $("#SaveForm").validate().settings.rules = null; 
    $('#SaveForm').attr('action', '@(Url.Content("~/Home/EditCase?finalize=false"))'); 
}); 

正如你可以看到我修改表單的action屬性指向不同的URL與敲定=假的查詢字符串屬性。我也刪除模型上的任何驗證。如果其他按鈕被點擊,我什麼都不做 - 執行默認行爲。

而且在我的控制器我有兩個處理行動提交一個動作:

public ActionResult EditCase(EditInfantModel model, bool finalize = true) 
{ 
    // Logic for handling submit in here... 
} 

我認爲你可以將類似的技術用於你的問題。我不知道這是否是您要尋找的答案,但我認爲這是值得一提...

相關問題