Получить ViewData IList при обратной передаче в ASP.NET MVC - PullRequest
0 голосов
/ 22 октября 2009

У меня есть следующее на мой взгляд:

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

Есть ли способ получить список на обратной передаче, чтобы увидеть, изменились ли значения в текстовых полях?

Спасибо

Ниже приведен упрощенный пример, поскольку он был запрошен:

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

Надеюсь, это поможет.

1 Ответ

1 голос
/ 22 октября 2009

Это самый простой способ сделать это - назовите каждый элемент управления корзины следующим форматом:

<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 свяжет значения с моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...