服务器控件内的按钮不会渲染onclick =“__ doPostback”

时间:2010-11-11 11:33:04

标签: asp.net

我正在开发一个Asp.net服务器控件(继承自DataBoundControl),我现在只有一个按钮,它在CreateChildControls覆盖中创建。即使此按钮在呈现的页面中分配了Click事件,该按钮也没有带有__doPostback的onclick事件或类似的东西。我错过了什么吗?

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();
    }
}

2 个答案:

答案 0 :(得分:1)

我自己找到了答案,理所当然。这很奇怪。 Button具有属性UseSubmitBehavior,默认情况下为true,默认情况下使用浏览器提交行为。将此值设置为false可以解决问题。

然而,如果它总是这样,我会注意到。所以我在ASCX中创建了一个按钮,其值为false。因此,根据您创建按钮的方式,默认情况会有所不同。这很奇怪。

答案 1 :(得分:0)

不应该有任何onclick事件.... <asp:Button>被解析为普通的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);
}