我的页面上有一个表单:
@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 :(得分: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;
}