Метод потерянного фокуса для текстового поля asp.net?

Как написать метод потерянного фокуса для текстового метода asp.net? Пожалуйста, кто-нибудь есть идеи, чтобы написать это, поделитесь со мной?

Ответы на вопрос(4)

Почему бы тебе не использовать это. Lostfocus работает так же с:

OnTextChanged="TextBox_TextChanged"
 Dima Grigoriev22 мар. 2018 г., 14:55
но что если ваша ценность не изменилась? Это не работает

Если вы хотите, чтобы сервер что-то делал после того, как текстовое поле теряет фокус, вы можете добавить AutoPostback = "True" и, если вы не хотите, чтобы обратная передача перезагрузила всю страницу, используйте UpdatePanel:

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" 
                            OnTextChanged="TextBox1_TextChanged" />
        </ContentTemplate>
    </asp:UpdatePanel>

Функция TextBox1_TextChanged может затем что-то делать с текстом (на стороне сервера).

 Răzvan Flavius Panda15 янв. 2013 г., 13:38
почему это не принятый ответ?
 Kamal05 окт. 2010 г., 16:51
Из интереса - как панель обновления останавливает перезагрузку всей страницы
 RustyH30 апр. 2014 г., 23:43
В любом случае уже использовал панели обновления, просто забыл об ontextoted, мне нравится этот ответ. +1
 Josh05 окт. 2010 г., 17:34
@ Камаль ... это не так. Панель обновления ничего не делает для предотвращения загрузки всей страницы на сервер. По сути, происходит то, что обратная передача выполняется на стороне клиента с использованием XmlHttpRequest, а затем все, кроме содержимого UpdatePanel, выбрасывается и возвращается. Это смягчает "мерцание" обычной обратной передачи, но не экономит время обработки на сервере.
 C Sharper28 мар. 2014 г., 06:34
когда я нажимаю вкладку, фокус на текстовом поле теряется, но все равно не происходит событие обмена
 Willem05 окт. 2010 г., 20:38
Он перезагружает всю страницу, но отправляет только html панели (ов) обновлений и некоторый javascript для обновления содержимого в ответе. Ответ может быть намного меньше, чем загрузка всей страницы, и браузер не должен повторно отображать страницу. Это может немного ускорить процесс, пользователь не заметит никаких мерцаний, и процесс будет намного более плавным.
if (!Page.IsPostBack)
    {
        txtName.Attributes.Add("onblur","alert('Hello world')");
    }
Решение Вопроса

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

Давайте посмотрим на код и рассмотрим его по частям.

Поскольку ASP.Net TextBox не предоставляет серверное событие для OnBlur, вам придется делать это вручную. К счастью, этого довольно легко достичь. Предположим, у вас есть небольшой кусочек кода на странице .aspx. Вы хотите обновить сторону сервера управления Label всякий раз, когда TextBox теряет фокус.

<asp:Label ID="lblOnBlur" runat="server">On Blur Example</asp:Label><br />
<asp:TextBox ID="tbOnBlur" runat="server" ClientIDMode="Static" /><br />
<asp:Label ID="lblOutput" runat="server" />

ASP.Net имеет встроенныйфункция на стороне клиента вызывается для запуска обратных передач, которые принимают два параметра:

Цель (идентификатор элемента управления, вызвавшего событие)Аргумент (необязательная информация, которую вы хотите передать на сервер)

Вымог просто подключите событие в разметке, добавив следующий атрибут и значение в ваш TextBox:

onblur="__doPostBack('tbOnBlur','OnBlur');"

Однако у фреймворка есть простой способ сгенерировать этот скрипт для вашей серверной стороны. В вашем методе Page_Init просто добавьте вызовGetPostBackEventReference и назначьте его атрибуту "onblur" для вашего элемента управления следующим образом:

protected void Page_Init(object sender, EventArgs e)
{
    var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur");
    tbOnBlur.Attributes.Add("onblur", onBlurScript);
}

Со стандартными событиями управления сервером соединение и вызов события обрабатываются автоматически для вас путемIPostBackEventHandler, Это много работы для одноразового решения, поэтому давайте просто обработаем его вручную, проверив параметры запроса.

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        var ctrlName = Request.Params[Page.postEventSourceID];
        var args = Request.Params[Page.postEventArgumentID];

        HandleCustomPostbackEvent(ctrlName, args);
    }
}

private void HandleCustomPostbackEvent(string ctrlName, string args)
{
    //Since this will get called for every postback, we only
    // want to handle a specific combination of control
    // and argument.
    if (ctrlName == tbOnBlur.UniqueID && args == "OnBlur")
    {
        lblOutput.Text = "On Blur Event Handled Server Side!" + DateTime.Now;
    }
}

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

Надеюсь это поможет!

Ура,
мистифицировать

 hardba1103 авг. 2013 г., 20:30
Очень хорошо! Спасибо
 Josh22 мая 2012 г., 19:52
@ Аарон - Спасибо :)
 JCO902 авг. 2017 г., 14:53
Очень хорошо объяснил, работает отлично, спасибо.
 Ashok kumar19 апр. 2012 г., 11:40
Большое спасибо за ваш прекрасный ответ Genii. Ваш пост очень информативен для меня.
 Aaron22 мая 2012 г., 19:03
Я видел несколько других предложений о том, как этого добиться, и ваш ответ, безусловно, лучший. Спасибо!
 Zo Has06 окт. 2010 г., 07:06
+1 Джош. Это было очень информативно.

Ваш ответ на вопрос