0

我得到了以下 Razor 视图,该视图显示 HDD 列表,以便用户添加到购物车。当用户按下每行硬盘旁边的按钮时,它会将数量和硬盘的身份传递给控制器​​。但是,虽然每个 HDD 的 ID 都正确显示,但当我检查控制器的参数时,“hddId”始终为 1,“数量”正确为 5。

@model IEnumerable<TestStore.Models.Hdd>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using(Html.BeginForm("AddToCart","Cart")){
<table>
    <tr>
        <th>
            Ident
        </th>
        <th>
            Brand
        </th>
        <th>
            Name
        </th>
        <th>
            Model
        </th>
        <th>
            Speed
        </th>
        <th>
            Capacity
        </th>
        <th>
            Cache
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.hddId)
        </td>
        <td>
            @Html.Hidden("hddId", item.hddId)
            @Html.Hidden("quantity", 5)
            @Html.DisplayFor(modelItem => item.brand)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.model)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.speed)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.capacity)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.cache)
        </td>
        <td>
            <input type="submit" value="Add to Cart" />
        </td>
    </tr>

}

</table>
}
4

3 回答 3

0

正如其他人所说,这不起作用,因为当您提交时,您提交的是表格中的每一行,而不仅仅是点击的那一行。

一种选择是按照他们在本文中的建议进行操作:

http://federmanscripts.com/2010/01/12/form-and-table-row-nesting-workaround/

也就是说,使用 javascript,您将按下按钮时的表单值复制到隐藏行并提交。

于 2012-09-23T07:40:47.287 回答
0

Codingbiz 是正确的。提交按钮不是指任何特定的行,而是指整个表格。我怀疑“hddId”总是“1”的原因是因为这是提交表单时看到的“hddId”的第一个引用。我对其进行了更改,因此 @using(Html.BeginForm(...)) 位于 @foreach 循环内,因此每一行都有自己的表单和提交按钮:

@foreach (var item in Model) {

    <tr>
        @using(Html.BeginForm("AddToCart","Cart")){
        <td>
            @Html.DisplayFor(modelItem => item.hddId)
        </td>
        <td>
            @Html.Hidden("hddId", item.hddId)
            @Html.Hidden("quantity", 5)
            @Html.DisplayFor(modelItem => item.brand)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.model)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.speed)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.capacity)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.cache)
        </td>
        <td>
            <input type="submit" value="Add to Cart" />
        </td>
        }
    </tr>
}
于 2012-09-23T07:19:45.077 回答
0

我通过使用按钮类型=“提交”而不是输入类型=“提交”来解决验证问题。通过将 id 号传递给控制器​​,它仍然可以正常工作。

@using(Html.BeginForm("AddToCart","Cart")){
<table>
    <tr>
    //header stuff here
    </tr>

    @foreach (var item in Model) {
    //row data goes here
    //remove hidden field reference to @item.hddId
    <tr>
    <td>
        <button type="submit" value="@item.hddId" name="hddId">Add to Cart</button>
    </td>
    </tr>
</table>
}
于 2012-09-26T16:41:44.417 回答