我正在开发一个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();
}
}
答案 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);
}