我正在.Net中创建一个C#Web应用程序
我已重写Panel控件以使div可单击。它看起来像这样:
public class ProjectPanel : System.Web.UI.WebControls.Panel, System.Web.UI.IPostBackEventHandler
{
public ProjectPanel()
{
CssClass = "project";
this.Click += new EventHandler(ProjectPanel_Click);
}
public event EventHandler Click;
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
public void RaisePostBackEvent(string eventArgument)
{
OnClick(new EventArgs());
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
this.Attributes.Add("onclick", "__doPostBack('" + this.ClientID + "', '');");
base.Render(writer);
}
public void ProjectPanel_Click(object sender, EventArgs e)
{
Label l = new Label();
l.Text = " HIYA";
this.Controls.Add(l);
}
}
现在,这在页面内工作正常。但是,我还有一个Web用户控件,如下所示:
<div class="team">
<asp:Panel runat="server" ID="TheCanvas" CssClass="projects" />
</div>
现在,当我将覆盖面板添加到TheCanvas面板时,click事件不再被注册。回发发生,但ProjectPanel_Click不会触发。有任何想法吗?我正在通过代码添加面板。
答案 0 :(得分:1)
您的面板应该在每次回发时创建。回发发生但是服务器端不存在您的面板。尝试通过页面加载功能上的代码添加面板。
答案 1 :(得分:0)
您应该使用UniqueID而不是ClientID,因为当在另一个控件中客户端ID以parend客户端ID作为前缀时,请将onclick属性设置替换为:
this.Attributes.Add("onclick", "__doPostBack('" + this.UniqueID + "', '');");
顺便说一句。你应该知道,如果你没有在页面上有另一个实现IPostBackDataHandler的控件,__ doPostback javascript就不会出现,你会得到javascript错误:
__ doPostBack未定义
你应该在面板控件中实现IPostBackDataHandler并调用Page.RegisterRequiresPostBack(this),详见这个链接:
http://aspalliance.com/1071_Smart_ListControl_in_ASPNET_1x20.4