Определите, когда происходит обратная передача из-за изменения текстового поля - PullRequest
0 голосов
/ 05 марта 2009

У меня есть usercontrol, у которого с autopostback установленным в true. Когда пользователь вводит текст и удаляется из текстового поля, asp.net запускает событие обратной передачи. Тем не менее, это не обрабатывается текстовым полем, а является просто обратной передачей - page_load срабатывает, а затем жизнь продолжается.

Мне нужен способ узнать, что это текстовое поле вызвало событие. Затем я хочу запустить собственное пользовательское событие, чтобы моя главная страница могла подписаться на него и обрабатывать событие при изменении текстового поля.

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

У кого-нибудь есть мысли?

Ответы [ 5 ]

1 голос
/ 05 марта 2009

Я думаю, что вы что-то упустили, поэтому я хочу объяснить это шаг за шагом:

Ваше текстовое поле должно быть примерно таким:

<asp:TextBox runat="server" ID="TextBox1" AutoPostBack="true" 
OnTextChanged="TextBox1_TextChanged"></asp:TextBox>

и в вашем коде должно быть такое событие:

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    string str = TextBox1.Text;
}

ПРИМЕЧАНИЕ: если вы хотите прикрепить ваше событие в коде позади, вы можете сделать это:

TextBox1.TextChanged +=new EventHandler(TextBox1_TextChanged);

но если вы говорите о пользовательских элементах управления, вы должны реализовать IPostBackDataHandler интерфейс для создания событий.

0 голосов
/ 05 марта 2009

Как упоминалось в других ответах, вам нужно обработать событие OnTextChanged.

<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>

private void TextBox1_TextChanged(object sender, System.EventArgs e)
{
    TextBox txt = (TextBox)sender;
    string id = txt.ID;

    switch(id)
    {
        case "TextBox1":
            break;
    }
}
0 голосов
/ 05 марта 2009

Отправителем загрузки страницы всегда будет ASP.default_aspx, потому что именно эта страница вызывает это событие.

Вы можете подключиться к четному OnTextChanged, где этим отправителем будет текстовое поле, которое изменило или вызвало публикацию обратно.

Имейте в виду, что загрузка страницы всегда будет срабатывать до любого из событий на элементах управления.

0 голосов
/ 05 марта 2009

Это потенциально то, что можно упустить, но есть ли у вас событие, закодированное для события TextChanged текстового поля? Если вы установили автопост, но никогда не создавали для него событие, вы только загрузите свою страницу и другие связанные события.

0 голосов
/ 05 марта 2009

Это динамически создаваемый пользовательский контроль или текстовое поле? Если это так, вы должны воссоздать этот элемент управления в событии page_load, и событие должно быть запущено в текстовом поле как обычно.

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