簡體   English   中英

c#如何使重寫的面板在用戶控件中工作

[英]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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM