Как загрузить страницу со значениями по умолчанию после обратной передачи - PullRequest
1 голос
/ 14 мая 2010

Я создаю пользовательские элементы управления, которые я помещаю в панель обновления и делаю их видимыми только при необходимости с помощью триггеров.После того, как он появится, он появится в диалоговом окне, поэтому у него есть кнопка закрытия, которая просто скрывает элемент управления на стороне клиента.

Элементы управления имеют несколько состояний обратной передачи, как в мастере, для этого я использую элемент управления с несколькими представлениями.Моя проблема заключается в том, что как только пользователь находится на шаге номер два в элементе управления, если пользователь закрывает диалоговое окно, а затем снова открывает диалоговое окно (обратите внимание, что элемент управления отображается на сервере и перезагружается при обновлении панели обновления), второй этапвсе еще будет отображаться.Причина в том.потому что всякий раз, когда происходит обратная передача, элемент управления будет загружать свое состояние, используя viewstate, даже если EnableViewState имеет значение false, он все равно будет загружать его с помощью метода LoadControlState.поэтому мой вопрос: как заставить пользовательский элемент управления загружать новые значения по умолчанию без каких-либо данных обратной передачи.

Ответы [ 3 ]

0 голосов
/ 14 мая 2010

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

У меня было очень много подобных проблем с WebForms, где я использовал только UpdatePanel для ajax, так как он «выглядит» как простой вариант. MVC звучит немного как кривая обучения, и это так, однако вы можете добиться чего-то, создавая страницы с MVC и jQuery без MS ajax и хлопот со всеми событиями на странице, которые постоянно сражаются друг с другом. Трудно сделать этот шаг без знания MVC и грязной руки, но оно того стоит.

0 голосов
/ 14 мая 2010

Это возможно.

Я нашел секретный метод в классе элемента управления, называемый ClearChildState (), это защищенный метод, который очищает состояние представления и состояние управления для всех дочерних элементов управления.

Итак, в моем примере я создал класс, который наследуется от панели

namespace MyControls
{
  public class Panel:System.Web.UI.WebControls.Panel
    {
        public void Reset()
        {
            ClearChildState();
        }
    }
}

На моей странице инициализации события я проверяю запрос [флаг] для сброса элемента управления

public partial class Test : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (!string.IsNullOrEmpty(Request["Reset"]) && Request["Reset"] == "1")
        {
            pnlCreateAccountDialog.Reset();               
        }
    }
}

OnClient сторонау меня есть функция Reset (), которую я могу вызывать всякий раз, когда я хочу, чтобы следующий постбэк загрузил чистый элемент управления

  <script type="text/javascript">
        function AddReset() {
            $('#Reset').val('1');
        }
        function RemoveReset() {
            $('#Reset').val('');
        }
    </script>
0 голосов
/ 14 мая 2010

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

Я уверен, что это нарушит ваш дизайн.

Рассматривали ли вы написание страницы как RESTful?По крайней мере, тогда вы можете отказаться от viewstate, прочитать и записать в значимое хранилище данных.

ViewState, вероятно, является основной причиной, по которой я перешел в MVC и теперь избегаю веб-форм, таких как чума.

...