2012-02-16 45 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

相关问题