powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Repeater и UpdatePanel
3 сообщений из 3, страница 1 из 1
Repeater и UpdatePanel
    #38396444
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть UserControl, который состоит из UpdatePanel и TextBox, событие которого TextChanged нужно каким-то образом обрабатывать.

Так вот проблема. Если контрол помещается в Repeater, который биндится на Page_Load, то обработчик события TextChanged вызывается не только у того UserControl, у которого произошло, а у всех в Repeater'e.
Т.е если поменять текст первого контрола в примере, то обработчик будет вызван 2 раза, а если текст контрола вне репитера, то вообще все 3.

Если перенести привязку данных в Page_Init - то обработчик вызывается, как и ожидается, 1 раз.

Как обойти обработчик - вернее не выполнять какие-то действия внутри обработчике я знаю *(закоментированная строка в _TextChanged), но хотелось бы чтобы обработчик не вызывался лишний раз, при этом перенести привязку данных в Page_Init в связи с особенностями проекта не предоставляется возможным.

как же быть, уважаемые, бьюсь уже почти цельный день, пути не вижу?

Форма :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Work.WebForm2" %>
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
<!DOCTYPE html >
<html>
<head runat="server"/>
<body style="background:white; margin: 50px;">
    <form id="form1" runat="server">    
    <asp:ScriptManager id="Scriptmanager1" runat="server" />        
    Repeater1 : Dynamic added Controls
 
    <asp:Repeater runat="server" ID="Repeater1" Visible="true">
    <ItemTemplate></ItemTemplate>
    </asp:Repeater>    
    
2 Static added Controls

    <uc1:WebUserControl1 ID="WebUserControl_1" runat="server" />
    <uc1:WebUserControl1 ID="WebUserControl_2" runat="server" />
    </form>
</body>
</html>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
using System;
using System.Web.UI.WebControls;

namespace Work
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        //protected void Page_Init(object sender, EventArgs e)
        //{
        //    BindRepeaterToDataSource();
        //}
        
        protected void Page_Load(object sender, EventArgs e)
        {
             BindRepeaterToDataSource();
             AddControlsToRepeater();                       
        }

        void BindRepeaterToDataSource() 
        {
            Repeater1.DataSource = new int[] { 1, 2 };
            Repeater1.DataBind();
        }

        void AddControlsToRepeater() 
        {
            foreach(RepeaterItem r in Repeater1.Items)
                r.Controls.Add(Page.LoadControl("~/WebUserControl1.ascx") as WebUserControl1);
        }
    }
}



UC:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="Work.WebUserControl1" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server"  UpdateMode="Conditional" ChildrenAsTriggers="true">        
    <ContentTemplate>        
        <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />
        <asp:Label ID="Label1" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using System;
using System.Web.UI;

namespace Work
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack) { TextBox1.Text = "init"; }
        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            //if((sender as Control).UniqueID == Request.Form["__EVENTTARGET"])
            Label1.Text = DateTime.Now.ToLongTimeString() + " Target: "+ Request.Form["__EVENTTARGET"];
        }
    }
}
...
Рейтинг: 0 / 0
Repeater и UpdatePanel
    #38397487
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, прямо не знаю, какой из ответов выбрать..
...
Рейтинг: 0 / 0
Repeater и UpdatePanel
    #38398008
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я такой хороший пример наклепала...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Repeater и UpdatePanel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]