インデックスビューに、ドロップダウンとテキストボックスを備えた簡単な検索ページがあります。ドロップダウンに対するユーザーの設定を覚えておきたいので、それをテーブルに保存し、必要に応じて取得します。コントローラ機能は次のとおりです。
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%>
アプリを起動すると(これはデフォルトのページです)、リストが正常に読み込まれ、ユーザーのアイテムが選択されます。ただし、ページの他の場所へのリンクなど、ページに移動すると、リストが読み込まれますが、デフォルトで最初の項目が選択されます。デバッガーを実行しましたが、常にインデックス関数を実行しています。「メッセージ」出力によると、選択する正しい値が常に渡されます。そのシナリオで、リスト内の正しいエントリが選択されないのはなぜですか。
更新:ドロップダウンから選択した値に応じて、フォームに他のデータがあります。リンクを介してページに移動すると、ページの残りの部分は適切なアイテムが選択されているかのように動作しますが、ドロップダウンはデフォルトで上部になります。つまり、ドロップダウンの値が「A」、「B」、「C」で、「C」を選択し、ページを再読み込みするリンクをクリックすると、ドロップダウンに「A」が表示されますが、残りの部分は「A」と表示されます。ページには「C」のデータがあります。