1
如何製作默認的模型綁定手柄列表?模型綁定到列表
比方說,我有一個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
我的看法是這樣的(按照從this的建議,並this,博客帖子):
@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
關鍵字。太晚了,我得睡一覺。 :)
是的,這是我鏈接到的博文。但它不適合我,我不明白爲什麼。在Scotts的例子中,視圖模型本身是一個集合,而在我的場景中,列表是模型中的一個屬性。 –
@Jakob Gade,你應該使用編輯器模板,而不是在視圖中編寫一些醜陋的循環,並手動嘗試生成輸入字段名稱。我已經更新了我的答案,以舉例說明你。看看這是多麼容易?不需要編寫任何循環和難看的視圖,也不需要擔心字段名稱。一切都按照慣例很好地工作。對不起,我的VB.NET很生疏,但翻譯起來應該是微不足道的。 –
謝謝,很好的例子,我會試試看。 –