我想创建一个包含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文档演示了类似的例子。但是,在遵循这些示例后,我收到此错误。我在俯瞰什么?
答案 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,以确保点击中吗?