Tor*_*ups 3 asp.net-mvc strongly-typed-view drop-down-menu
我似乎无法找到一篇好的博客文章,其中展示了如何在没有魔术字符串"ViewData"的情况下将模型绑定到视图(使用强类型视图是我正在尝试的方法)
有没有人知道我需要在下面改变什么来直接将它绑定到我的模型?
视图
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of MvcApplication1.Category))" %>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<%=Html.DropDownList("CategoryList")%>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
调节器
Function Index() As ActionResult
Dim list As New List(Of Category)
list.Add(New Category With {.CategoryID = 1, .CategoryName = "Test1"})
list.Add(New Category With {.CategoryID = 2, .CategoryName = "Test2"})
Return View()
End Function
Run Code Online (Sandbox Code Playgroud)
编辑
VB中的最终解决方案如下所示,感谢您的响应!
调节器
Function Index() As ActionResult
Dim id As Integer = 1
Dim ProductObject As Product = mProductService.GetProductById(id)
Return View(ProductObject)
End Function
Run Code Online (Sandbox Code Playgroud)
视图
<%=Html.DropDownList("Category", New SelectList(Model.Categories, "CategoryID", "CategoryName"))%>
Run Code Online (Sandbox Code Playgroud)
产品类别(具有类别的IEnumeralbe属性)
Public Class Product
Public Sub New()
End Sub
Private mProductID As Integer
Public Property ProductID() As Integer
Get
Return mProductID
End Get
Set(ByVal value As Integer)
mProductID = value
End Set
End Property
ReadOnly Property Categories() As IEnumerable(Of Category)
Get
Dim list As New List(Of Category)
list.Add(New Category With {.CategoryID = 1, .CategoryName = "Test1"})
list.Add(New Category With {.CategoryID = 2, .CategoryName = "Test2"})
Return list
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
下拉列表助手需要一个IEnumerable<SelectListItem>,而不是一个IEnumerable<Category>.通常,您所做的是让您的页面具有特定的模型.该模型包含下拉列表中所选值的属性,而不是集合.您提供的集合可通过ViewData进行选择.您可以拥有一个仅包含视图的模型,包括要从中选择的属性和集合,但这可能意味着类的扩散.关于增殖类或魔术字符串设计是否更糟,存在一些争论.
我对你的代码的看法是这样的:
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of Foo)" %>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<%=Html.DropDownList("Category", ViewData("CategoryList"))%>
</asp:Content>
Function Index() As ActionResult
Dim list As New List(Of SelectListItem)
list.Add(New SelectListItem With {.Value = 1, .Text = "Test1"})
list.Add(New SelectListItem With {.Value = 2, .Text = "Test2"})
ViewData("CategoryList") = list
Return View()
End Function
Run Code Online (Sandbox Code Playgroud)
其中Foo是一个包含int类型属性Category的类.
如果你想做一个强类型的视图,那么让Foo有一个类型为SelectListItem的属性,然后改变:
<%=Html.DropDownList("Category", ViewData("CategoryList"))%>
Run Code Online (Sandbox Code Playgroud)
至
<%=Html.DropDownList("Category", Foo.Categories )%>
Run Code Online (Sandbox Code Playgroud)
和
ViewData("CategoryList") = list
Return View()
Run Code Online (Sandbox Code Playgroud)
至
Dim foo as New Foo
foo.Categories = list
Return View(foo)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16096 次 |
| 最近记录: |