5

非常に通常のASP.NETドロップダウンリストに問題があります。ページに。のドロップダウンリストがありますAutoPostback=false。そして、ドロップダウンリストのコンテンツを生成するコード:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        this.dropDownList.Items.Add(new ListItem("text1", "value1"));
        this.dropDownList.Items.Add(new ListItem("text2", "value2"));
        this.dropDownList.SelectedIndex = 0;
    }
}
  • ページを実行し、2番目のオプションtext2を選択します。
  • その後、F5キーを押すと、ページが読み込まれます(まだポストバックを行っていないことに注意してください。ドロップダウンリストの選択した項目を変更して、F5キーを押してください)。

ドロップダウンリストでデフォルトのアイテムが。で選択されることを期待していましたindex = 0が、選択されたアイテムは引き続きアイテム「text2」(選択したアイテム)です。この状況では、はthis.dropDownList.SelectedIndex = 0;機能しません。

全くわかりません。誰か助けてもらえますか?

更新: この動作はFirefoxでのみ発生し、Chrome/IEでは発生しません。

4

2 に答える 2

2

ポストバックの意味を誤解しているようです。ページの更新だけを意味するものではありません。ブラウザで F5 キーを押すと、元のリクエストがサーバーに送信され、falsePage.IsPostBackになります。

実際のポストバックを実行する場合は、asp:Buttonサーバー コントロールをページに追加してクリックします (または単にAutoPostBack=trueDropDownList に設定します)。


Firefox は何らかのクライアント側のキャッシュを行っているように見えるため、F5 キーを押してもサーバーへの別のラウンドトリップは行われません。selectページの読み込み時に要素をリセットすることで、これを回避できます。

<script type='text/javascript'>
    document.getElementById('<%= dropDownList.ClientID %>').selectedIndex = 0;
</script>

(注: ドキュメントがロードされた後に実行されるように、これをページの下部に配置します。)

于 2012-09-07T05:17:28.223 に答える
1

F5キーを押すと、リクエストとともに投稿ヘッダーが送信されます。
最後のリクエストは、2番目のオプションを選択することでした。だからそれが選択されます。

URLをもう一度入力するか、アドレスバーにEnterキーを押した場合。投稿データは送信されません。この場合、SelectedIndexは0になります。

于 2012-09-07T04:15:51.693 に答える