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

Это все, что я понял об этой ошибке за последние 2 года:

upstream sent too big header while reading response header from upstream - это общий способ nginx сказать: «Мне не нравится то, что я вижу»

  1. Сбой потока вашего вышестоящего сервера
  2. Обратный сервер отправил неверный заголовок обратно
  3. Уведомление / Предупреждения, отправленные обратно из STDERR, сломали свой буфер, и он, и STDOUT были закрыты

3: Посмотрите журналы ошибок над сообщением, идет ли потоковая передача с зарегистрированными строками, предшествующими сообщению? PHP message: PHP Notice: Undefined index: Пример фрагмента из цикла мой файл журнала:

2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
... // 20 lines of same
PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:
2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "ta_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Firstname

вы можете видеть в 3-й строке (из 20 предыдущих ошибок) ограничение буфера было достигнуто, нарушено, и следующий поток записал поверх Это. Затем Nginx закрыл соединение и вернул 502 клиенту.

2: зарегистрировать все заголовки, отправленные по запросу, просмотреть их и убедиться, что они соответствуют стандартам (nginx не разрешает удалять / истекать cookie-файлы старше 24 часов, отправляя недопустимую длину содержимого, поскольку сообщения об ошибках были буферизованы до content countted ...)

примеры включают в себя:

<?php
//expire cookie
setcookie ( 'bookmark', '', strtotime('2012-01-01 00:00:00') );
// nginx will refuse this header response, too far past to accept
....
?>

и это:

<?php
header('Content-type: image/jpg');
?>

<?php   //a space was injected into the output above this line
header('Content-length: ' . filesize('image.jpg') );
echo file_get_contents('image.jpg');
// error! the response is now 1-byte longer than header!!
?>

1: проверить или создать журнал сценариев, чтобы обеспечить ваш поток достигает правильной конечной точки и не завершается до завершения.

26
задан James123 5 October 2010 в 13:11
поделиться

3 ответа

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

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

Поскольку 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 имеет встроенную клиентскую функцию , которая вызывается для запуска обратных передач, которая принимает два параметра:

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

Вы можете просто подключить событие в разметке, добавив следующий атрибут и значение для вашего 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;
    }
}

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

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

Приветствия,
Джош

37
ответ дан 28 November 2019 в 06:53
поделиться
if (!Page.IsPostBack)
    {
        txtName.Attributes.Add("onblur","alert('Hello world')");
    }
4
ответ дан 28 November 2019 в 06:53
поделиться

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

OnTextChanged="TextBox_TextChanged"
0
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: