c # Как заставить переопределенную Panel работать внутри пользовательского элемента управления - PullRequest
1 голос
/ 16 февраля 2012

Я делаю веб-приложение на C # в .Net

Я переопределил элемент управления 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);
    }
}

Теперь, это прекрасно работает внутри страницы. Тем не менее, у меня также есть веб-пользовательский элемент управления, который выглядит следующим образом:

<div class="team">

<asp:Panel runat="server" ID="TheCanvas" CssClass="projects" />

</div>

Теперь, когда я добавляю переопределенную панель на панель TheCanvas, событие нажатия больше не регистрируется. Обратная передача происходит, но ProjectPanel_Click не запускается. Есть идеи? Я добавляю панель через код.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Ваша панель должна быть создана с каждым постбэком. Обратная передача происходит, но ваша панель не существует на стороне сервера. Попробуйте добавить панель через код для функции загрузки страницы.

0 голосов
/ 17 февраля 2012

Вместо ClientID вы должны использовать UniqueID, потому что когда в другом управляющем идентификаторе клиента указан префикс идентификатора клиента, замените значение атрибута onclick следующим:

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

btw.Вы должны знать, что если на странице нет другого элемента управления, реализующего IPostBackDataHandler, javascript __doPostback не будет присутствовать, и вы получите ошибку 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...