我的索引视图上有一个简单的搜索页面,带有一个下拉列表和一个文本框。我想记住用户对下拉菜单的偏好,所以我将它存储在一个表中并根据需要检索它。这是控制器功能:
Function Index(ByVal lob As String, ByVal filter As String) As ActionResult
If If(lob, "") = "" Then
lob = GetUserPreferenceLob()
End If
ViewData("lob") = New SelectList(GetLobValues(), "Value", "Text", lob)
ViewData("message") = lob
Return View()
End Function
视图如下所示:
<% Using Html.BeginForm()%>
Line of Business:
<%=Html.DropDownList("lob", Nothing, New With {.onchange = "document.forms[0].submit()"})%>
Search:
<%=Html.TextBox("filter")%>
<img src="..." alt="Search" onclick="document.forms[0].submit()" />
<%=ViewData("message")%>
<% End Using%>
当我启动应用程序(这是默认页面)时,它成功加载列表并选择用户的项目。但是,如果我导航到该页面,例如通过页面上其他位置的链接,它会加载列表但默认选择第一项。我已经运行了调试器,它总是通过 Index 函数,并且根据“消息”输出,它总是传递要选择的正确值,那么为什么这种情况没有在列表中选择正确的条目呢?
更新:我在表单上还有其他数据,这些数据取决于下拉列表中的选定值。通过链接导航到页面时,页面的其余部分的行为就像选择了适当的项目一样,但下拉菜单默认位于顶部。换句话说,如果我的下拉列表有值“A”、“B”和“C”,并且我选择“C”,然后单击重新加载页面的链接,下拉列表显示“A”,但其余部分该页面具有“C”的数据。