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

时间:2017-01-22 01:58:33

标签: asp.net-mvc checkbox selected

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

查看

@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" } ) 

}

MODEL

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; }
}

}

CONTROLLER

    public ActionResult VerifyOrderInfo()  
    {

        return View();

    }

1 个答案:

答案 0 :(得分:1)

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

  • 将您的表单更改为发布,并将操作更改为 VerifyOrderInfo

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

  • 将IEnumerable更改为列表,以便您可以按索引进行绑定

    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填充ItemProfile列表,并使用IsSelected作为输入项。