.NET MVC 4 - foreach循环中的按钮操作

时间:2012-11-23 19:48:03

标签: c# .net asp.net-mvc

我目前有这样的视图:

@using (Html.BeginForm("Compare", "Carousel", FormMethod.Post)) 
{
@foreach (var product in Model.Products)
{
        <tr>
             <td>@product.Provider.Name</td>
             <td>&pound;@Math.Round(product.MonthlyPremium, 2, MidpointRounding.AwayFromZero)</td>
             <td>@Html.ActionLink("More Details", "MoreDetails", new { id = product.ProductId })</td>
             <td><button name="compare" value="@product.ProductId">Compare</button</td>
        </tr>
}
}

控制器:

[HttpPost]
public ActionResult Compare(ProductsWithDetailModel model) // This is a guess, Model may not persist? 
 {
       // Code here

       return View("Index", model);
 }

我真正想要的是,当点击一个按钮时,将调用Controller,并且已经选择的产品(点击的按钮)将被添加到项目列表中。

如何确定在控制器中找到了哪个按钮?为什么我之前无法在网上找到任何教程,这肯定是它的基本功能?或者我接近错了?

3 个答案:

答案 0 :(得分:2)

ASP.NET MVC接受所有输入并通过动词将其发送给动作。这些控件的绑定由View上的name属性进行,值取决于我们所讨论的控件(文本,复选框,单选,选择,按钮等...)。您可以在ProductsWithDetailModel上设置一个名为 compare 的属性,它会接收您点击的按钮的值。

答案 1 :(得分:2)

每个项目有1个表格怎么样?

E.g。

@foreach (var product in Model.Products)
{
    <tr>
         <td>@product.Provider.Name</td>
         <td>&pound;@Math.Round(product.MonthlyPremium, 2, MidpointRounding.AwayFromZero)</td>
         <td>@Html.ActionLink("More Details", "MoreDetails", new { id = product.ProductId })</td>
         <td>
             @using (Html.BeginForm("Compare", "Carousel", FormMethod.Post)) 
             {
                 <input type="hidden" name="productId" value="@product.ProductId"  />
                 <button name="compare">Compare</button>
             }
         </td>
    </tr>
}

答案 2 :(得分:0)

使用onclick。在循环中设置js隐藏值。在控制器检查。