2010-11-11 41 views
1

我正在開發一個Asp.net服務器控件(從DataBoundControl繼承),並且我現在只有一個按鈕,它在CreateChildControls覆蓋中創建。即使此按鈕在呈現的頁面中分配了Click事件,該按鈕也沒有帶__doPostback或類似事件的onclick事件。我錯過了什麼嗎?服務器控件內部的按鈕不呈現onclick =「__ doPostback」

public class FileList : DataBoundControl, INamingContainer 
{ 
    protected override void CreateChildControls() 
    { 
     // Add button 
     btnAddFile = new System.Web.UI.WebControls.Button(); 
     btnAddFile.ID = "btnAddFile"; 
     btnAddFile.Click += btnAddFile_Click; 
     btnAddFile.CssClass = "Button"; 
     btnAddFile.CausesValidation = false; 
     Controls.Add(btnAddFile); 
    } 

    void btnAddFile_Click(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

很難說。你可以發佈'ascx'文件嗎? – Oded 2010-11-11 11:36:47

+0

沒有ascx文件。這是服務器控制頁 – 2010-11-11 11:37:37

回答

1

,我發現自己的答案,sollely偶然。這是非常怪異的。 Button有一個屬性UseSubmitBehavior默認情況下是true這意味着默認使用瀏覽器提交行爲。將此值設置爲false可解決此問題。

但是,如果它總是這樣,我會注意到這一點。所以我去ASCX裏面創建了一個按鈕,值是false。所以默認設置根據你創建按鈕的方式不同而不同。這很奇怪。

+0

我知道這是7歲,但我敢肯定它與'CausesValidation =「false」有關;'' – EJC 2017-10-17 20:09:38

0

不應該有任何onclick事件.... 被解析到普通HTML提交按鈕,與名稱等於鍵ID和值等於按鈕上的文字。

嘗試創建按鈕,在不回傳,希望這將解決您的問題:

if (!Page.IsPostBack) 
{ 
     // Add button 
     btnAddFile = new System.Web.UI.WebControls.Button(); 
     btnAddFile.ID = "btnAddFile"; 
     btnAddFile.Click += btnAddFile_Click; 
     btnAddFile.CssClass = "Button"; 
     btnAddFile.CausesValidation = false; 
     Controls.Add(btnAddFile); 
}