2012-02-16 38 views
1

我有我的頁面上的表單:在表單中使用兩個按鈕調用不同的動作

@using(Html.BeginForm("DoReservation","Reservation")) 
{ 
...some inputs 
<button id="recalculate">Recalculate price</button> 
<button id="submit">Submit</button> 
} 

當我點擊「重新計算價格」按鈕,我想調用以下動作:

public ActionResult Recalculate(FormCollection form) 
{ 
var price = RecalculatePrice(form); 
... do some price recalculation based on the inputs 
return PartialView("PriceRecalculation",price); 
} 

當我點擊「提交」按鈕時,我想要調用「DoReservation」動作(我希望表單被提交)。 我該如何達到這樣的目標?

+0

可能重複http://stackoverflow.com/questions/442704/how-do-you-handle-多提交按鈕在asp-net-mvc-framework) – JasCav 2012-02-16 22:27:06

+0

@JasCav may是正確的關於它是一個重複..另一種選擇可能是使用jQuery的附加到按鈕點擊重寫表單操作之前,它被提交? – 2012-02-16 23:07:18

+0

@TrevorPilley - 你是對的,你可以這樣做。但是,那麼你依賴於JavaScript(這通常是公平的,但並不總是保證)。我在複製中鏈接到的方法在所有情況下都可以使用。 – JasCav 2012-02-16 23:11:07

回答

0

我可以建議的是,添加一個新的屬性到你的視圖模型並稱之爲ActionType。

public string ActionType { get; set; } 

,然後改變你的CSHTML文件中像下面

@using (Html.BeginForm()) 
    { 
     <div id="mytargetid">  
       ...some inputs*@ 
     </div> 
     <button type="submit" name="actionType" value="Recalculate" >Recalculate price</button> 
     <button type="submit" name="actionType" value="DoReservation" >Submit</button> 
} 

基於操作類型值後的操作方法,你可以決定做什麼!

我注意到,在您的意見,你提到你需要返回部分和替換,如果與返回的部分,沒有問題,你可以使用

@using (Ajax.BeginForm("DoProcess", new AjaxOptions { UpdateTargetId = "mytargetid", InsertionMode = InsertionMode.Replace })) 

,並在控制器改變你的行動來回報局部視圖或Java腳本代碼重定向頁面

public ActionResult DoProcess(FormModel model) 
     { 
      if (model.ActionType == "Recalculate") 
      { 
       return PartialView("Test"); 
       } 
      else if (model.ActionType == "DoReservation") 
      { 
       return JavaScript(string.Format("document.location.href='{0}';",Url.Action("OtherAction"))); 


      } 
      return null; 
     } 
的[你是如何處理在ASP.NET MVC框架多個提交按鈕?](
+0

@Azadah Khojandi感謝您的回答 - 但我提到只有「重新計算」操作才能返回部分視圖並且替換特定div的內容。第二個動作應該重定向到某個視圖。那麼,通常它也可以以兩種操作都返回部分視圖的方式工作,但它們必須替換不同的div。 – 2012-02-17 07:27:25

+0

@niao用於重定向到ajax調用中的不同頁面,您可以使用返回JavaScript(string.Format(「document.location.href ='{0}';」,「Url.Action(」About「))); – 2012-02-18 13:09:58

相關問題