一个请求后使用更多输入 - 并让控制器识别单击了哪个输入

时间:2015-06-26 08:27:55

标签: asp.net-mvc

我希望页面上有一个输入按钮用于一个表单。这些按钮中的每一个都应该触发相同的控制器POST操作(因此以相同的方式更新模型,基本上更新购物车数量)。现在,在控制器中 - 使用相同的动作,我想另外触发2个替代行为。选项1 - 重定向到第x页(继续购物),2 - 发送电子邮件,完成交易,重定向到y页。

我不知道从哪里开始引导控制器了解哪个按钮被点击了?可能这些输入应该有一个id或名称,模型将能够以这种方式识别它们,但我不确定如何引导控制器这样做?

我最好寻找没有jquery javascript等的解决方案。非常感谢帮助。

查看

@model Project.ViewModels.CartViewModel
@using (Html.BeginForm())
{
for (int i =0; i < Model.CartItems.Count; i++ )
        {
            @Html.DisplayFor(m=>m.CartItems[i].Product.Name)
             @Html.TextBoxFor(m => m.CartItems[i].Quantity)
}
<input type="submit" name="emailName" id="emailId" value="Send E-mail" />
<input type="submit" name="emailName" id="emailId" value="Redirect" />
}

控制器

[HttpPost]
public ActionResult Show(CartViewModel cvm)
{
if (TryUpdateModel(cvm))
{
    if( ??? )return RedirectToAction("x", "Home");
    if( ??? )
      { 
       //send E-mail
       return RedirectToAction("y", "Home");
      }
}

1 个答案:

答案 0 :(得分:1)

听起来你是在追求这样的事情......

查看

@model Project.ViewModels.CartViewModel
@using (Html.BeginForm())
{
    for (int i = 0; i < Model.CartItems.Count; i++)
    {
        @Html.DisplayFor(m => m.CartItems[i].Product.Name)
        @Html.TextBoxFor(m => m.CartItems[i].Quantity)
    }
    <button name="action" type="submit" value="email">Send E-mail</button>
    <button name="action" type="submit" value="redirect">Redirect</button>

}

<强>动作

[HttpPost]
public ActionResult Show(CartViewModel cvm, string action)
{
    if(action == "email")
    {
        //Do something
    }

    if(action == "redirect")
    {
        //Do something
    }

}