UpdatePanel и ярлыки - PullRequest
       23

UpdatePanel и ярлыки

0 голосов
/ 16 июля 2009

У меня есть панель обновления с некоторыми элементами управления. например, у меня есть метка, текстовое поле и кнопка для отправки обратно.

Текст моей метки извлекается из файла ресурсов, поэтому при загрузке страницы я делаю следующее

Page_Load()
{
    If(!isPostBack)
    {
        Label.Text = //Resource value;
    }    
}

Проблема в том, что после отправки сообщения через триггер нажатия кнопки текст метки исчез, так как я предполагаю, что ресурс должен быть установлен снова?

Какой-нибудь совет по избавлению от этой избыточной обратной метки? Поскольку у меня есть несколько элементов управления, все текстовые поля трудно обернуть в одну панель обновления и т. Д. *

Приветствия

Ответы [ 2 ]

1 голос
/ 16 июля 2009

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

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

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

// Store it
ViewState["YourLabel"] = "Text you want to store in the label.";

// On postback make sure you are assigning it
YourLabel.Text = Convert.ToString(ViewState["YourLabel"]);

Я не думаю, что вы найдете автоматический способ сделать это. Вы можете написать вспомогательную функцию, которая будет делать это автоматически каждый раз, когда происходит обратная передача, перебирая элементы в ViewState и предполагая, что вы назвали ключ так же, как ваши элементы управления, выполните поиск любых элементов управления меткой с именем ключа и назначить текст автоматически на основе значения, сохраненного для этого ключа. На самом деле я никогда не пробовал этого, но это, вероятно, работало бы за счет небольшой скорости.

0 голосов
/ 16 июля 2009

Вы можете использовать любой из следующих методов:

  • Выключите ViewState для этого элемента управления. EnableViewState="false" и установите его в коде при каждой загрузке страницы. Если это просто строка, загруженная из файла ресурсов, как вы сказали, проблем с производительностью не будет, так что не беспокойтесь.
  • Установите значение элемента управления декларативно (в файле .aspx). Вы можете использовать синтаксис привязки <%$ ... %>.
  • Установите значение в коде в фазе Pre_init (до загрузки / запуска отслеживания ViewState).

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

...