MVC 将部分视图中的选定复选框项目传递给控制器

MVC Pass Selected Checkbox Items in Partial View to Controller

我有部分观点认为我希望客户使用复选框进行选择。然后我希望在单击提交按钮时将所选项目的 ID 发送到控制器。控制器将重定向到验证视图。什么是好的、简单且安全的解决方案?如果可能的话,我想避免使用 Javascript。谢谢!

VIEW

@model OrderTracking.Models.ViewModel.ItemDataView

<div>

@using (Html.BeginForm("VerifyItem", "ReserveItem", FormMethod.Get))
{
    //@Html.AntiForgeryToken()  //TODO: Wire-up
    <table class="table table-striped table-condensed table-hover">
        <thead>
            <tr>
                <th></th>
                <th>Item ID</th>
            </tr>
        </thead>
        <tbody>

            @foreach (var i in Model.ItemProfile)
            {
                <tr>
                    <td>@Html.CheckBoxFor(r => i.IsSelected, new { @class = "checkbox" })</td>
                    <td>@Html.DisplayFor(r => i.ItemId)</td>

                </tr>
            }
        </tbody>
    </table>



    @Html.ActionLink("Verify Order Information", "VerifyOrderInfo", "ReserveItem", "", new { @class = "btn btn-primary btn-large" } ) 

}

型号

namespace OrderTracking.Models.ViewModel
{
public class ItemProfileView
{
    [Key]
    public int ItemId { get; set; }
    public bool IsSelected { get; set; }

}

public class ItemDataView
{
    public IEnumerable<ItemProfileView> ItemProfile { get; set; }
}

}

控制器

    public ActionResult VerifyOrderInfo()  
    {

        return View();

    }

有很多方法可以做到这一点。需要对您的代码进行最少更改的一个是:

  • 将表单更改为 Post 并将操作更改为 VerifyOrderInfo

    @using (Html.BeginForm("VerifyOrderInfo", "ReserveItem", FormMethod.Post))

  • 将 IEnumerable 更改为 List 这样您就可以通过索引

    进行绑定

    public List<ItemProfileView> ItemProfile { get; set; }

  • 现在您可以通过索引引用复选框并为 ItemId 添加隐藏输入

    @Html.CheckBoxFor(r => r.ItemProfile[i].IsSelected, new { @class = "checkbox" }) @Html.HiddenFor(r => r.ItemProfile[i].ItemId)

  • 使用 提交 按钮而不是 ActionLink

    <input type="submit" name="Verify Order Information" class="btn btn-primary btn-large" />

  • 将模型添加到 VerifyOrderInfo 操作中,以便您可以针对它进行编码

    public ActionResult VerifyOrderInfo(ItemDataView model)

现在,当您提交表单时,它应该将模型发送到操作中,其中包含填充了 ItemId 和 IsSelected 的 ItemProfile 列表。