MVC5模型绑定到DropdownList

时间:2016-05-09 19:28:30

标签: c# asp.net asp.net-mvc binding html.dropdownlistfor

我不知道为什么我的模型没有正确绑定到下拉列表,我已成功地在其他几个位置完成此操作,但这里无济于事。这是购物车,只需要一个更新购物车的数量下拉列表,并显示数据库中的当前数量。

型号:

    public class CartViewModel
{
    public List<CategoryModel> Categories { get; set; }
    public CartModel Cart { get; set; }
    public IEnumerable<SelectListItem> Quantities { get; set; }
}   

    public class CartModel
{
    public List<CartItem> Items { get; set; }
}

public class CartItem
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public int Quantity { get; set; }
    public float Price { get; set; }
    public float TotalPrice { get; set; }
    public string ImageName { get; set; }
}

数量等级,0-10

    public class QuantityList
{
    public static IEnumerable<SelectListItem> QtyList = new List<SelectListItem>()
    {
        new SelectListItem() {Text="0", Value="0" },
        new SelectListItem() {Text="1", Value="1" },
        new SelectListItem() {Text="2", Value="2" },
        new SelectListItem() {Text="3", Value="3" },
        new SelectListItem() {Text="4", Value="4" },
        new SelectListItem() {Text="5", Value="5" },
        new SelectListItem() {Text="6", Value="6" },
        new SelectListItem() {Text="7", Value="7" },
        new SelectListItem() {Text="8", Value="8" },
        new SelectListItem() {Text="9", Value="9" },
        new SelectListItem() {Text="10", Value="10" }
    };
}

查看

    @using (Html.BeginForm("UpdateCart", "Cart", FormMethod.Post))
{
    for (int i = 0; i < Model.Cart.Items.Count; i++)
    {
        <div class="CartItem">
            <span class="ItemName">@Model.Cart.Items[i].Name</span>
            **<span class="ItemQty">@Html.DropDownListFor(m => Model.Cart.Items[i].Quantity, Model.Quantities)</span>**
            <span class="RemoveItem">@Html.ActionLink("Remove", "RemoveItem", new { ProductId = Model.Cart.Items[i].ProductId })</span>
        </div>
    }

}

所有内容都正确加载和渲染,除了下拉列表,我甚至使用了TextBoxFor并使用正确的值正确呈现,但在尝试绑定到预先填充的selectlistitems列表时则不行

2 个答案:

答案 0 :(得分:1)

这是在.someChecked { opacity: 0.5; }循环中使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="main"> <div class="cat1">Element of category1</div> <div class="cat4">Element of category4</div> <div class="cat3">Element of category3</div> <div class="cat1">Element of category1</div> <div class="cat2">Element of category2</div> </div> <label> <input type="checkbox" name="all" checked="true"> All / none </label> <label> <input type="checkbox" name="cat1" checked="true"> A </label> <label> <input type="checkbox" name="cat2"> B </label> <label> <input type="checkbox" name="cat3"> C </label> <label> <input type="checkbox" name="cat4"> D </label>的一个不幸的限制(已在CodePlex上报告过几次)。您需要使用DropDownListFor()类型为for并使用EditorTemplateCartItem传递给它,或者在每次迭代中生成新的SelectList并设置AdditionalViewData财产。

SelectList

请注意,您可以将代码简化为

Selected

并使用for (int i = 0; i < Model.Cart.Items.Count; i++) { .... @Html.DropDownListFor(m => m.Cart.Items[i].Quantity, new SelectList(Model.Quantities, "Value", "Text", Model.Cart.Items[i].Quantity) .... } 并在视图

中填充public class CartViewModel { public List<CategoryModel> Categories { get; set; } public List<CartItem> Items { get; set; } public int[] Quantities { get; set; } }
Quantities

答案 1 :(得分:0)

您可以直接转到静态列表,而不是将列表绑定到viewmodel:

@Html.DropDownListFor(m => Model.Cart.Items[i].Quantity, QuantityList.QtyList)

因为您可以绑定任何已定义列表的内容。至于默认值不起作用的原因,我没有看到将QtyList静态变量传递给视图模型的数量属性的代码。