在表单中使用两个按钮调用不同的操作

时间:2012-02-16 22:24:47

标签: asp.net-mvc-3 forms

我的页面上有一个表单:

@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”操作(我希望提交表单)。 我怎样才能实现这样的目标呢?

1 个答案:

答案 0 :(得分: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>
 }

在基于ActionType值的post action方法中,你可以决定做什么!

我注意到你在评论中提到你需要返回部分和替换如果返回部分,没问题,你可以使用

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