0

インデックスビューに、ドロップダウンとテキストボックスを備えた簡単な検索ページがあります。ドロップダウンに対するユーザーの設定を覚えておきたいので、それをテーブルに保存し、必要に応じて取得します。コントローラ機能は次のとおりです。

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」のデータがあります。

4

3 に答える 3

2

Did you try refreshing the page after following a link to the page. It could be a locally cached version.

于 2009-04-16T16:34:28.957 に答える
0

おそらくキャッシング..。

こちらの関連​​スレッドをご覧ください(Stack Overflow)

于 2009-04-16T16:47:02.997 に答える
0

私はTextBoxesで非常によく似た問題を抱えています:

私のページでは、Html.TextBox( "Attribute"、Model.Attribute)を使用してテキストボックスをレンダリングします。ユーザーはこのテキストボックスに値を入力し、ボタンを押します。実行されるコードでは、モデルの属性の新しい値を計算してから、ビューを再度レンダリングします。Html.TextBox( "Attribute"、Model.Attribute)は引き続きユーザーが入力した値を表示しますが、Html.Encode(Model.Attribute)はモデルからの正しい値を表示します。

Html.TextBoxは、モデルからプログラマーが変更した値ではなく、ユーザーが入力した値を表示することを好むようです。したがって、2番目の入力パラメーターの値を表示する代わりに、Html.TextBoxはViewData.ModelState["Atrribute"]。Value.RawValueを表示しているように見えます。

そのため、ラウンドトリップでビューステートとモデルを変更するだけです。

于 2009-10-15T07:48:27.343 に答える