Использование Ajax в 2 вложенных пользовательских элементах управления - PullRequest
0 голосов
/ 17 июля 2011

Вот проблема:

У меня есть элемент управления (A), который я регистрирую / загружаю в другой элемент управления (B). затем я регистрирую элемент управления (B) на обычной странице .aspx

Я помещаю «Диспетчер сценариев» на этой странице и использую «Панель обновления» ajax в обоих элементах управления, но работают только основные компоненты элемента управления (B) (исключая элемент управления (A), который я зарегистрировал в элементе управления (B) )) .. так что в основном часть ajax работает для компонента, который загружается на страницу. если он загружен в другой элемент управления, он не будет работать!

Я хотел убедиться, что это не глупая ошибка в моем коде, поэтому я скопировал код неработающего элемента управления и добавил его на обычную страницу, и он заработал!

так в чем проблема, или я могу с этим поделать??

РЕДАКТИРОВАТЬ Некоторые коды

Контроль (B):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Itinerary.ascx.cs" Inherits="OTV.controls.Itinerary.ItineraryControl" %>
<p>
    Add new itinerary:</p>
<p>
    <br />
</p>

<div id="newItinerary_div" runat="server">
    <p>
        Title: 
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        Description:
        <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine"></asp:TextBox>

        Visible:
        <asp:CheckBox ID="CheckBox1" runat="server" />

    <div id="itineraryDays_div" runat="server">
    <h4>Itinerary days:</h4>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        <asp:PlaceHolder ID="DaysHolder" runat="server"></asp:PlaceHolder>
            </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="addMoreDay_btn" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>


    <asp:Button ID="addMoreDay_btn" runat="server" Text="Add one more day" 
        onclick="addMoreDay_btn_Click" />
&nbsp; This button dynamically create itineraryDay controller to the div

    </div>

</div>
</div>

Контроль (B) - Код позади файла:

public partial class ItineraryControl: System.Web.UI.UserControl
    {

        static int DaysCount = 1;
        static List<Control> _daysList;


        protected void addMoreDay_btn_Click(object sender, EventArgs e)
        {

        }

        public static Control GetPostBackControl(Page thePage)
        {
            Control myControl = null;
            string ctrlName = thePage.Request.Params.Get("__EVENTTARGET");
            if (((ctrlName != null) & (ctrlName != string.Empty)))
            {
                myControl = thePage.FindControl(ctrlName);
            }
            else
            {
                foreach (string Item in thePage.Request.Form)
                {
                    Control c = thePage.FindControl(Item);
                    if (((c) is System.Web.UI.WebControls.Button))
                    {
                        myControl = c;
                    }
                }

            }
            return myControl;
        }


        protected void Page_Init(object sender, EventArgs e)
        {
            Control myControl = GetPostBackControl(this.Page);

            if ((myControl != null))
            {
                if ((myControl.ClientID.ToString() == "addMoreDay_btn"))
                {
                    DaysCount = DaysCount + 1;
                }
            }

            _daysList = new List<Control>();

            for (int i = 1; i <= DaysCount; i++)
            {
                Control OneMoreDay = LoadControl("~/controls/Itinerary/ItineraryDayAdd.ascx");
                OneMoreDay.ID = "dayNo" + i;
                (OneMoreDay.FindControl("DayNum_TxtBx") as TextBox).Text = i.ToString();
                DaysHolder.Controls.Add(OneMoreDay);
                _daysList.Add(OneMoreDay);
            }
        }

        }

    }

Контроль (A):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ItineraryDayAdd.ascx.cs" Inherits="OnlineTravelAgency1.controls.Itinerary.ItineraryDayAdd" %>
<p>
        Day#:
        <asp:TextBox ID="DayNum_TxtBx" runat="server"></asp:TextBox>
</p>
<p>
        Title:
        <asp:TextBox ID="Title_TxtBx" runat="server"></asp:TextBox>
</p>
    <p>
        Day:&nbsp;
        <asp:DropDownList ID="Days_DrpDwnLst" runat="server">
            <asp:ListItem Value="0">Saturday</asp:ListItem>
            <asp:ListItem Value="1">Sunday</asp:ListItem>
            <asp:ListItem Value="2">Monday</asp:ListItem>
            <asp:ListItem Value="3">Tuesday</asp:ListItem>
            <asp:ListItem Value="4">Wednesday</asp:ListItem>
            <asp:ListItem Value="5">Thursday</asp:ListItem>
            <asp:ListItem Value="6">Friday</asp:ListItem>
        </asp:DropDownList>
</p>
    <p>
        Description: 
        <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine"></asp:TextBox>
</p>

... Это весь мой код! Я действительно застрял и не хотел перегружать вас своим кодом, но я не могу помочь вам достаточно, чтобы понять мою проблему

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