获取ViewData IList回到ASP.NET MVC中的回发

时间:2009-10-22 01:09:38

标签: asp.net-mvc

我认为我有以下内容:

<%using (Html.BeginForm()) {%>
<% foreach (var item in Model.Cart) { %>
    <div>
        <%= Html.TextBox("Cart.Quantity", item.Quantity, new { maxlength = "2" })%>
        <%= Html.Hidden("Cart.ItemID", item.ItemID)%>
    </div>
<% } %>
<input name="update" type="image" src="image.gif" />

然后我在我的控制器中有这个代码:

    public ActionResult Index()
    {
        CartViewData cartViewData = new CartViewData();
        IList<Item> items = ItemManager.GetItems();

        cartViewData.Cart = items;
        return View("Index", cartViewData);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(CartViewData cartViewData)
    {
        // cartviewData is null
    }

有没有办法在回发上抓取List以查看文本框中的值是否已更改?

由于

以下是请求后的简化示例:

<% for (int i = 0; i < Model.Cart.Count; i++ ) { %>
    <a href="javascript:void(0);" onclick="removeItem(<%= Model.Cart[i].ShoppingCartItemID %>);">Remove</a>
<% } %>

希望这有帮助。

1 个答案:

答案 0 :(得分:1)

这种最简单的方法是使用以下格式命名每个购物车项目控件:

<input type="text" name="Items[0].Quantity" />

其中0对应于items集合中项目的索引。接下来,将items集合移动到购物车上的属性,以便您的模型看起来像这样:

class CartViewData 
{
    public CartViewData()
    {
        this.Items = new List<Item>();
    }

    public IList<Item> Items { get; private set; }

    class Item
    {
       public int Quantity { get; set; }
    }
}

然后DefaultModelBinder将值绑定到模型。