Почему это событие происходит? - PullRequest
3 голосов
/ 18 марта 2011

У меня есть страница с повторителем и кнопкой.(довольно просто)

Мой репитер имеет событие rptEtats_ItemCreated поднято OnItemCreated

<asp:Repeater ID="rptEtats" runat="server" OnItemCreated="rptEtats_ItemCreated">
    <ItemTemplate>

    </ItemTemplate>

</asp:Repeater>

CodeBehind:

public void rptEtats_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    //Stuff
}

Кнопка на странице вызывает OnClickevent

<asp:Button ID="btnValid" runat="server" Text="Valid" OnClick="btnValid_click" />

CodeBehind:

public void btnValid_click(Object sender, EventArgs e)
{
   //Stuff
}

Работает нормально, пока я не нажму на кнопку, я ожидаю, что метод btnValid_click, но сначала вызывается метод rptEtats_ItemCreated!Я не понимаю почему.Страница снова загружается перед вызовом метода кнопки?Почему ретранслятор снова привязывается к данным?

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

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

1 голос
/ 18 марта 2011

Вы должны набрать rptEtats.Databind(); в Page_Init, то есть до загрузки состояния просмотра.В этом случае элементы управления будут воссозданы должным образом и будет запущена кнопка onclik.

1 голос
/ 18 марта 2011

Бьюсь об заклад, у вас в событии Page_Load, rptEtats.Databind() вызов.

Я прав?

Если true, вызовите этот метод следующим образом:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        rptEtats.Databind();
    }

}

Поведение, которое вы заметили, связано с жизненным циклом страницы. Событие загрузки страницы вызывается до события Click.

...