2012-09-07 60 views
5

我遇到了非常正常的ASP.NET下拉列表問題。 我在AutoPostback=false的頁面中有一個下拉列表。 和代碼生成下拉列表的內容:Dropdownlist selectedindex在頁面刷新時不起作用

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。
  • 之後,按F5鍵,這將做一個頁面加載(請注意,我沒有做任何回發呢,只是改變下拉列表中選擇的項目,然後按F5)

我預計下拉列表會現在選擇默認項目index = 0,但所選項目仍然是項目「text2」 - 我選擇的項目。在這種情況下,this.dropDownList.SelectedIndex = 0;不起作用。

我完全不明白。任何人都可以幫我嗎?

更新:此行爲只發生在Firefox中,它不會在Chrome/IE中發生。

+0

當你做一個自動回真正的頁面,如果塊不打了你得到的txt2作爲選定的移動> this.dropDownList.SelectedIndex = 0; out of!ispostback block – Devjosh

+0

但我在做AutoPostBack = false和代碼this.dropDownList.SelectedIndex = 0;正在被擊中 – user1514431

+0

我不好意思,我看不出有問題 – Devjosh

回答

1

當您按下F5鍵時,它將發送帖子標題和請求。
你最後的請求是選擇第二個選項。所以被選中。

如果您再次輸入網址,或點擊地址欄中的回車,你將不會發送發佈數據。 在這種情況下,您的SelectedIndex將爲0.

+0

很好地解釋+1已經 – Devjosh

+0

這真的很有趣。那麼,是否有解決方案來忘記最後一個請求,並且只需要按照我的意願選擇第一個項目? – user1514431

+1

F5意味着重新發送最後的請求。你可以看看html5的歷史api。它可能有幫助。你也可以在javascript中偵聽F5並設置'location.href'。 – nunespascal

2

看起來好像你在誤解什麼回帖的意思;它確實不是意味着只是一個頁面刷新。當您在瀏覽器中點擊F5時,原始請求將被髮送到服務器,並且Page.IsPostBack將爲false

如果要執行實際回發,請將asp:Button服務器控件添加到該頁面並單擊它(或者只需在DropDownList上設置AutoPostBack=true)。


這似乎是Firefox是做某種類型的客戶端緩存的,所以它不會再拍往返到服務器,當你按下F5。您可以通過在頁面加載時重置select元素來解決此問題。

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

(注:把這個頁面的底部,以便在文檔加載後執行)(!ispostaback)

+0

謝謝你的解釋。我在這裏要做的是處理用戶將按F5按鈕(或按下瀏覽器中的刷新按鈕)的情況。 – user1514431

+0

@ user1514431我更新了我的答案,以更好地解決您的問題。 – McGarnagle

+0

太棒了!我正在這樣做以解決FF的問題。但是我也找到了更好的解決方案,因爲這種行爲不僅發生在下拉列表中,而且發生在頁面中的每個控件(文本框,複選框......)。至少我們得到了一個解決方案作爲這裏的最後一招。 – user1514431

相關問題