代码之家  ›  专栏  ›  技术社区  ›  SidC

如何使用静态项创建ASP.NET MVC HTML.DropDownList?

  •  0
  • SidC  · 技术社区  · 15 年前

    我想创建一个包含两个项目的下拉列表:零件名称和 NSN .

    此DropDownList将用作搜索框控件的一部分,该控件将作为母版页的一部分进行部分呈现。用户将输入搜索文本并从下拉列表中选择零件名称或NSN,然后单击提交。查询将基于搜索文本返回结果。我已经定义了PartsController,它的相关部分如下:

        Function Search(ByVal searchtext As String, ByVal SearchType As String) As ActionResult
            Dim searchlist As List(Of String) = New List(Of String)
            searchlist.Add("Part Name")
            searchlist.Add("NSN")
            ViewData("searchlist") = New SelectList(searchlist)
    
            If SearchType = "PARTNAME" Then
                Dim SearchResult = From p In _entities.PartList _
                  Where p.PARTNAME = searchtext _
                  Select p
                Return View(SearchResult)
            End If
            If SearchType = "NSN" Then
                Dim SearchResult = From p In _entities.PartList _
                  Where p.NSN = searchtext _
                  Select p
                Return View(SearchResult)
            End If
            Return View("UnknownType")
        End Function
    

    partsform.ascx定义如下:

        <%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of DielToolMVC.PartList)" %>
        <%=Html.ValidationSummary("Please correct the errors and try again")%>
        <%  Using (Html.BeginForm("Search", "PartsController"))%>
            <fieldset>
                <p>
                    <label for="Parts">Please enter a part description or NSN.</label>
                    <%=Html.TextBox("searchtext") %>
                    <%=Html.DropDownList("searchlist")%>
                    <%=Html.ValidationMessage("Part Name or NSN", "*")%>
                </p>
                <p>
                    <input type="submit" value="Search" />
                </p>
            </fieldset>
        <% End Using%>
    

    调试时,我收到以下错误消息:

    没有键为“searchlist”且类型为“ienumerable”的ViewData项。

    我有点困惑 MSDN 文档演示了类似的示例。然而,在下面这些例子之后,我得到了这个错误。我忽略了什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jeff French    15 年前

    如果将此控件呈现为母版页的一部分,则必须将静态值列表添加到将使用该母版页呈现视图的每个操作方法中的ViewData中。如果这些值是静态的,并且在每次调用时都不会改变,那么您应该将它们编码到局部视图中,如下所示:

    <select id="searchlist" name="searchlist">
            <option value="PARTNAME" label="Part Name" />
            <option value="NSN" label="NSN" />
    </select>
    

    或者:

    <%  Dim items As New List(Of SelectListItem)()
        items.Add(New SelectListItem() With {.Value = "PARTNAME", .Text = "Part Name", .Selected = True})
        items.Add(New SelectListItem() With {.Value = "NSN", .Text = "NSN"})
    %>
    
    <%=Html.DropDownList("searchlist", items)%>
    
        2
  •  0
  •   Yuriy Faktorovich    15 年前

    你有没有可能不采取你认为的行动?你能把一个断点放在它向视图数据添加seachlist的地方,以确保该点被命中吗?