2012-02-15 29 views
1

我正在在.netC#如何獲得overrided面板的用戶控制

我已經覆蓋了Panel控件,使一個div點擊一個C#Web應用程序內工作。它看起來像這樣:

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面板,單擊事件心不是註冊了。回發發生,但ProjectPanel_Click不會觸發。有任何想法嗎?我通過代碼添加面板。

回答

0

而是客戶端ID的,你應該使用的UniqueID因爲當另一個控制客戶端ID與parend客戶端ID爲前綴,替換onclick屬性與此設置:

this.Attributes.Add("onclick", "__doPostBack('" + this.UniqueID + "', '');"); 

BTW。你應該知道,如果你不是網頁上有一個實現IPostBackDataHandler另一個控制呢,__doPostBack的JavaScript將不存在,你會得到JavaScript錯誤:

__doPostBack is not defined

你應該實現IPostBackDataHandler並調用Page.RegisterRequiresPostBack(此)您的控制面板裏面,看到這個鏈接的詳細信息:

http://aspalliance.com/1071_Smart_ListControl_in_ASPNET_1x20.4

http://www.timvasil.com/blog14/post/2007/10/30/Implementing-IPostBackDataHandler-once-and-for-all.aspx

1

您的面板應該在每次回發時創建。回發發生,但您的面板不存在於服務器端。嘗試通過頁面加載功能上的代碼添加面板。