gpt4 book ai didi

asp.net-mvc - 如何在没有 ViewData 的情况下绑定(bind) Html.DropDownList(强类型 View )

转载 作者:行者123 更新时间:2023-12-01 11:10:06 28 4
gpt4 key购买 nike

我似乎找不到一篇很好的博客文章来展示如何在没有神奇字符串“ViewData”的情况下将模型绑定(bind)到 View (使用强类型 View 是我尝试采用的方法)

有谁知道我需要在下面进行哪些更改才能将其直接绑定(bind)到我的模型?

查看

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

Controller

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

编辑

最终在VB中的解决方案如下图,感谢大佬们的回复!

Controller

Function Index() As ActionResult
Dim id As Integer = 1
Dim ProductObject As Product = mProductService.GetProductById(id)

Return View(ProductObject)
End Function

查看

<%=Html.DropDownList("Category", New SelectList(Model.Categories, "CategoryID", "CategoryName"))%>

产品类别(带有类别的 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

最佳答案

下拉列表助手接受 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

其中 Foo 是一个类,它包含一个类型为 int 的属性 Category。

如果你想做一个强类型的 View ,那么让 Foo 有一个类型为 SelectListItem 的属性 Categories,然后改变:

<%=Html.DropDownList("Category", ViewData("CategoryList"))%>

<%=Html.DropDownList("Category", Foo.Categories )%>

    ViewData("CategoryList") = list
Return View()

    Dim foo as New Foo
foo.Categories = list
Return View(foo)

关于asp.net-mvc - 如何在没有 ViewData 的情况下绑定(bind) Html.DropDownList(强类型 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/891107/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com