我目前有这样的视图:
@using (Html.BeginForm("Compare", "Carousel", FormMethod.Post))
{
@foreach (var product in Model.Products)
{
<tr>
<td>@product.Provider.Name</td>
<td>£@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,并且已经选择的产品(点击的按钮)将被添加到项目列表中。
如何确定在控制器中找到了哪个按钮?为什么我之前无法在网上找到任何教程,这肯定是它的基本功能?或者我接近错了?
答案 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>£@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隐藏值。在控制器检查。