2009-10-07 116 views
2

我正在使用VB.NET和Webforms與MS AJAX。UpdatePanel中的按鈕需要點擊兩次才能觸發

我在MS AJAX更新面板中有一個按鈕。當頁面被加載時,按鈕的可見性被聲明性地設置爲'false'。

用戶選中了一個複選框(同樣在UpdatePanel中)後,我將該按鈕的可見性設置爲true,並且按預期顯示。

但是,用戶必須點擊按鈕兩次才能發生任何事情。第一次點擊只是將焦點放在按鈕上。需要再次點擊以獲得回發(視覺驗證和斷點驗證)

任何想法爲什麼這可能是?

非常感謝!

Anthony

+0

頁面是否回發的杉木st點擊,還是隻在瀏覽器中獲得焦點? – 2009-10-07 15:27:10

回答

4

您是否在頁面上有動態顯示的驗證器?

如果顯示驗證器並且鼠標按下按鈕,驗證器可以將按鈕從鼠標下方推出,因此當您擡起手指時,實際上並不會導致單擊事件觸發。

如果是這種情況,可以通過將驗證器的display屬性設置爲static來解決此問題。

其他的想法:

是否有任何JavaScript按鈕的客戶端運行的onclick,onmousedown事件,onmouseup?

你是否動態地將此按鈕添加到頁面?

您是否將CheckBoxAutoPostBack屬性設置爲TrueFalse?如果它設置爲true,則可能在單擊按鈕時出現異步回發。

+0

它必須是來自第三方控件干擾的JavaScript。 – Anthony 2009-10-08 14:50:01

0

我在IE6和Firefox 3.5中測試了它,它對我來說工作正常。你的配置不同嗎?

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" Text="Checkbox" /> 
     <asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" /> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    Button1.Visible = CheckBox1.Checked; 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = DateTime.Now.ToString(); 
} 
+0

感謝您的嘗試。它一定是第三方文件上傳控制,這是不同的東西。 – Anthony 2009-10-08 14:51:47

0

狂猜:你是否檢查頁面的Init或Load階段複選框的值?由於頁面循環,複選框控件將不會設置其重新發布的值,並且會顯示爲未選中狀態。只有在第二次回發中,您的代碼才能正確查看檢查的狀態(從視圖狀態加載)並顯示按鈕。

在複選框更改事件或PreRender中設置可見性。

0

感謝您的輸入。

我在UpdatePanel中有一個3rd Party File Upload control以及按鈕,這似乎會導致與按鈕衝突。

我已經訴諸解決與JavaScript的問題。我添加下面的方法靠近頁面的頂部:

<script language="javascript" type="text/javascript"> 
    function DisplayImportButton() { 
     document.getElementById('<%= btnImport.ClientId %>').style.visibility = "visible"; 
    } 
</script> 

我以下內容添加到頁面的底部,這樣的按鈕在開始總是隱藏:

<script language="javascript" type="text/javascript"> 
    var elem; 

    elem = document.getElementById('<%= btnImport.ClientId %>'); 

    if (elem) {   
     elem.style.visibility = "hidden"; 
    } 
</script> 

在處理程序的複選框的選中狀態的變化我說:

ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "ImportButtonScript", _ 
     "DisplayImportButton();", True) 

親切的問候

相關問題