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

时间:2009-12-14 16:31:23

标签: asp.net-mvc

我想创建一个包含2个项目的DropDownList:Part Name和NSN

此下拉列表将用作搜索框控件的一部分,该控件将作为母版页的一部分进行部分渲染。用户将输入其搜索文本,并从下拉列表中选择“部件名称”或“NSN”,然后单击“提交”。查询将根据searchtext返回结果。我已经定义了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%>

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

  

没有ViewData项目,其键入'searchlist'的类型为'IEnumerable'。

我有点困惑,因为MSDN文档演示了类似的例子。但是,在遵循这些示例后,我收到此错误。我在俯瞰什么?

2 个答案:

答案 0 :(得分:1)

如果此控件呈现为母版页的一部分,则必须在每个操作方法中将静态值列表添加到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)%>

答案 1 :(得分:0)

你有没有可能没有达到你认为你的行动?你可以在一个断点处添加seachlist到ViewData,以确保点击中吗?