如何解决列表MVC中每个项目的隐藏值
我正在尝试制作某种购物车,所以我在视图中显示项目列表。
我为每个显示的项目添加了一个提交按钮,其值为“ +添加”,并输入了一个数字,其值为金额。
这是我的代码:
查看:
@model MyProject.ViewModel.AddProductsViewModel
@{
Layout = null;
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="table" align="left" style="padding-left:15px">
<tr>
<th>
Product
</th>
</tr>
@foreach (var item in Model.ProductsList)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Descripcion)
</td>
<td>
<input type="hidden" name="ProductId" value="@item.ProductId" />
<input type="number" id="Amount" name="Amount"
min="1" max="30" value="1">
<input type="submit" value="+ Add" class="btn btn-primary" />
</td>
</tr>
}
</table>
}
型号:
public class AddProductsViewModel
{
...stuff here...
public List<Products> ProductsList { get; set; }
}
我需要我的控制器从我单击提交到的项目中获取productId,但是通过这种方式,我只能获取列表中第一项的ID。 我该如何实现?
编辑我的上下文代码
编辑
感谢大家的回应。您的回答并不能解决问题,但我认为我可能提出了错误的问题。我会提供一些上下文信息:我试图在ViewModel中显示产品列表,其中每个产品的侧面都有一个“添加到购物车”按钮和一个输入样式号(通过在每个产品上使用,产品列表,如我的代码所示),然后当我单击“添加到购物车”按钮时,它将特定项目的信息提供给控制器。
我不知道我做错了什么。这可能吗?如果可以,怎么办?
我的代码存在的问题是,无论我单击哪个添加到购物车按钮,它始终仅提供列表中第一项的信息。
解决方法
代替使用:
<input type="hidden" name="ProductId" value="@item.ProductId" />
使用:
@Html.HiddenFor(modelItem => item.ProductId)
以下代码可能会帮助您:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Descripcion)
</td>
<td>
@Html.HiddenFor(modelItem => item.ProductId)
<input type="number" id="Amount" name="Amount"
min="1" max="30" value="1">
<input type="submit" value="+ Add" class="btn btn-primary" />
</td>
</tr>
}
如果您要一次发送所有数据,也可以使用以下示例:
@for( int i = 0; i < Model.Count(); ++i)
{
<tr>
<td>
@Html.DisplayFor(modelItem => Model[i].Descripcion)
</td>
<td>
@Html.HiddenFor(modelItem => Model[i].ProductId)
<input type="number" id="Amount" name="Amount"
min="1" max="30" value="1">
<input type="submit" value="+ Add" class="btn btn-primary" />
</td>
</tr>
}
控制器的操作方法如下所示:
[HttpPost]public ViewResult(ModelClass model)
{
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。