2010-11-11 55 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); 
}