[英]c# How to get an overrided Panel to work inside a User Control
我正在.Net中制作一個C#Web應用程序
我已覆蓋面板控件以使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);
}
}
現在,在Page中可以正常工作。 但是,我也有一個Web用戶控件,如下所示:
<div class="team">
<asp:Panel runat="server" ID="TheCanvas" CssClass="projects" />
</div>
現在,當我將替代面板添加到TheCanvas面板時,單擊事件不再注冊。 回發發生,但ProjectPanel_Click不會觸發。 有任何想法嗎? 我通過代碼添加面板。
您的面板應與每個回發一起創建。 回發發生,但服務器側不存在您的面板。 嘗試通過頁面加載功能上的代碼添加面板。
您應該使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.