Как создать ASP.NET MVC HTML.DropDownList со статическими элементами? - PullRequest
0 голосов
/ 14 декабря 2009

Я хотел бы создать DropDownList, содержащий 2 элемента: Имя детали и NSN .

Этот выпадающий список будет использоваться как часть элемента управления окна поиска, которое будет частичным отображением как часть моей главной страницы. Пользователь введет свой текст поиска и выберет либо Part Name или NSN из выпадающего списка, и нажмите Submit. Запрос будет возвращать результаты, основанные на тексте поиска. Я определил 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 ]

1 голос
/ 14 декабря 2009

Если этот элемент управления отображается как часть вашей главной страницы, тогда список статических значений необходимо будет добавить к 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)%>
0 голосов
/ 14 декабря 2009

Возможно ли, что вы не попали в Действие, о котором думаете? Можете ли вы поместить точку останова, где он добавляет список поиска в ViewData, чтобы убедиться, что эта точка достигнута?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...