Как сделать списки дескрипторов привязки модели по умолчанию?
Допустим, у меня есть класс ShoppingCart, у которого есть список ShoppingCartItem:
Public Class ShoppingCart
Public Property CouponCode As String
Public Property Items As New List(Of ShoppingCartItem)
End Class
Public Class ShoppingCartItem
Public Property Title As String
Public Property Count As Integer
End Class
Мой взгляд выглядит следующим образом (согласно совету этого и этого , поста в блоге):
@ModelType VAVTag.LuckyDraw.ShoppingCart
@Code
Layout = Nothing
End Code
<!DOCTYPE html>
<html>
<head runat="server">
<title>Index</title>
</head>
<body>
@Using Html.BeginForm()
@<fieldset>
<legend>ShoppingCart</legend>
@Html.TextBoxFor(Function(m) m.CouponCode)
<hr />
@Html.EditorFor(Function(m) m.Items)
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
End Using
</body>
</html>
Элементы отображаются с помощью EditorTemplate (спасибо Darin ):
@ModelType ShoppingCartItem
@Html.EditorFor(Function(m) m.Title )
@Html.EditorFor(Function(m) m.Count )
<br />
В моем контроллере я вставляю некоторые случайные данные, и представление хорошо отображает мою корзину с тремя элементами.
Public Class ShoppingCartController
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
Dim model As New ShoppingCart
model.Items.Add(New ShoppingCartItem With {.Count = 1, .Title = "Item A"})
model.Items.Add(New ShoppingCartItem With {.Count = 17, .Title = "Item B"})
model.Items.Add(New ShoppingCartItem With {.Count = 100, .Title = "Item C"})
Return View(model)
End Function
<HttpPost()>
Function Index(model As ShoppingCart) As ActionResult
Return View(model) ' model is empty!
End Function
End Class
Однако, когда я отправляю страницу, никакие значения не выбираются, даже поле CouponCode. Модельный объект пуст. Что дает?
В конечном счете, моя цель состоит в том, чтобы добавлять / удалять элементы на стороне клиента с помощью javascript, а затем связывать модели автоматически, когда они отправляются на страницу.
Обновление: я просто пропустил ключевое слово Property
в моих объявлениях свойств модели. Уже слишком поздно, и мне нужно немного поспать. :)