【问题标题】:Hidden value for each item in List (MVC)List (MVC) 中每个项目的隐藏值
【发布时间】:2020-09-07 00:22:36
【问题描述】:

我正在尝试制作某种购物车,因此我在视图中显示了一个商品列表。

我添加了一个带有“+ Add”值的提交按钮和一个带有显示的每个项目的值金额的数字输入。

这是我的代码:
查看:

    @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 中显示一个产品列表,其中每个产品都有一个添加到购物车按钮和一个输入样式编号(通过使用一个 for each,因为我做了一个产品列表,如我的代码所示),当我单击添加到购物车按钮时,它会将特定项目的信息提供给控制器。

我不知道我是不是做错了。这可能吗?如果有,怎么做?

我的代码的问题是,无论我点击了哪个添加到购物车按钮,它总是只给出列表中第一项的信息。

【问题讨论】:

标签: c# html asp.net-mvc


【解决方案1】:

而不是使用:

<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)
{
...
}

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多