2009-10-22 37 views
0

我已經在我的觀點如下:獲取的ViewData的IList回到回發在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

這種簡單的方法是做到這一點 - 命名每個車項目控制與此格式:

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

凡0對應於項目集合項目的索引。接下來,將項目集合到一個屬性上車,這樣你的模型看起來是這樣的:

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

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

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

然後DefaultModelBinder將值綁定到模型。

+0

謝謝!那就是訣竅。 另一方面,有沒有更好的方法來做到這一點?爲了實現這一目標,我不是動態構建「名稱」的忠實粉絲。 – Thomas 2009-10-22 02:05:14

+0

您可以使用lambda表達式和html幫助器方法創建用於構建輸入元素的html幫助器方法,以便爲集合構建輸入元素。 – eulerfx 2009-10-22 16:43:37