Asp.NET将已检查项目列表传递给控制器

时间:2014-09-12 21:14:30

标签: html asp.net web checkbox

我在这里遗漏了一些东西。我有一个带有复选框的项目表,我希望能够从中选择项目,然后将选中项目列表发送到控制器。我无法将任何内容传递给控制器​​。我想要一个可以在控制器中使用的列表或数组。

这就是我所拥有的:

@model Recipe2Grocery.ViewModels.GroceryListViewModel

@{
    ViewBag.Title = "Index";
}
@section Scripts{
    <style type="text/css">
        table {
            color: white;
        }
</style>
}

<div style="margin: 20px;">
@using (Html.BeginForm("Index", "RecipeIngredient", FormMethod.Post))
{
    <table class="table">
        <tr>
            <th></th>
            <th>
                Quantity
            </th>
            <th>
                IngredientName
            </th>
            <th>
                Category
            </th>
            @foreach (var item in Model.ShoppingList)
            {
            <tr>
                <td>
                    @Html.CheckBoxFor(modelItem => item.IsChecked)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Ingredient.Quantity)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Ingredient.IngredientName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Ingredient.Category)
                </td>
            </tr>
            }
        </table>
        <input type="submit" />
}

然后我有一个viewmodel:

public class ListItem
{
    public bool IsChecked { get; set; }
    public RecipeIngredient Ingredient { get; set; }

    public ListItem()
    {
        Ingredient = new RecipeIngredient();
    }
}

public class GroceryListViewModel
{
    public List<ListItem> ShoppingList { get; set; }

    public GroceryListViewModel()
    {
        ShoppingList = new List<ListItem>();
    }
}

然后我的控制器想成为:

[HttpPost]
    public ActionResult Index(GroceryListViewModel vm)
    {
        // blah
        return RedirectToAction("Index", "Home");
    }

0 个答案:

没有答案