Требуется помощь по вложенному веб-событию User Control в ASP.NET - PullRequest
2 голосов
/ 05 апреля 2009

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

Веб-страница: ссылается на родительский элемент управления, называемый «слот», который динамически загружает

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" 
 Inherits="light.Home" %>

<%@ Reference Control="~/UserControl/Slot.ascx" %>

Родительский пользовательский элемент управления: ссылается на дочерний элемент управления, называемый «ray», который также динамически загружает

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Slot.ascx.cs"    
 Inherits="light.Slot" %>

<%@ Reference Control="~/UserControl/Ray.ascx" %>

Дочерний пользовательский элемент управления: есть кнопка «ButtonRay», которую я хочу, чтобы она запускалась при событии щелчка.

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Ray.ascx.cs" 
 Inherits="light.Ray" %>

<div id="AddRay" runat="server">

<asp:Button ID="ButtonRay" runat="server" Text="Ray" 
onclick="ButtonRay_Click"/>


</div>

Проблема: кнопка не запускает событие щелчка (ButtonRay_Click) со стороны сервера

protected void ButtonComment_Click(object sender, EventArgs e)
{
    // this the code that i want to be executed
}

Ответы [ 3 ]

1 голос
/ 05 апреля 2009

Может быть, это только я, но я никогда не видел, чтобы элементы управления ссылались и загружались таким образом. Вот что я бы попробовал сделать таким образом (это работает для меня):

На вашей домашней странице зарегистрируйте свой слот-контроль следующим образом, вместо того чтобы ссылаться на него, как раньше:

<%@ Register TagName="Slot" TagPrefix="cc" Src="~/Slot.ascx" %>

А затем добавьте элемент управления на свою страницу с помощью:

<cc:Slot ID="SlotControl" runat="server" />

Теперь в Slot.ascx, зарегистрируйтесь и включите элемент управления Ray:

<%@ Register TagName="Ray" TagPrefix="cc" Src="~/Ray.ascx" %>

<cc:Ray ID="RayControl" runat="server" />

А теперь в вашем контроле Ray добавьте свою кнопку:

<asp:Button ID="ButtonRay" Text="Ray" OnClick="ButtonRay_OnClick" runat="server" />

А в коде позади Ray.ascx.cs добавьте свой обработчик событий:

protected void ButtonRay_OnClick(object sender, EventArgs e)
{

}

Когда я добавляю точку останова для этого метода, запускаю приложение и нажимаю кнопку, событие OnClick перехватывается, как и должно быть. Я думаю, что происходит то, что простая ссылка на ваши элементы управления не связывает события. Если вы динамически загружали свои элементы управления, вы должны использовать Page.LoadControl(), чтобы они правильно подключались.

Дайте мне знать, если вам нужно больше объяснений.

EDIT:

Я только что заметил, что имя вашего метода нажатия кнопки не совпадает с тем, которое вы просили вызвать: кнопка ButtonRay выполняет ButtonRay_Click, но имя вашего метода - ButtonComment_Click.

0 голосов
/ 25 июля 2009

в aspx Page.ie: Home.aspx.cs

переопределить защищенный void OnInit (EventArgs e)

{
    InitializeComponent();
    base.OnInit(e);
}

приватная кнопка GetButton ()

{


    Button Btn = (Button)SlotControl.FindControl("RayControl").FindControl("ButtonRay");
    return Btn;
}



private void InitializeComponent()
{


    /*   For button Event Initialization */

    Button Btnclk = GetButton();

    Btnclk.Click += new EventHandler(Btnclk_TextChanged);

}

void Btnclk_TextChanged (отправитель объекта, EventArgs e)

{

/ * напишите свой код здесь ............. * /

 }
0 голосов
/ 25 июля 2009

в aspx Page.

переопределить защищенный void OnInit (EventArgs e) { InitializeComponent (); base.OnInit (е); } приватная кнопка GetButton () { Button Btn = (Button) SlotControl.FindControl ("RayControl"). FindControl ("ButtonRay"); вернуть Btn; } private void InitializeComponent () { / * Для кнопки Инициализация события * /

    Button Btnclk = GetButton();

    Btnclk.Click += new EventHandler(Btnclk_TextChanged);

} void Btnclk_TextChanged (отправитель объекта, EventArgs e)

{

/ * напишите свой код здесь ............. * /

}

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