ViewState не сохраняет пользовательские дополнения после обратной передачи - PullRequest
2 голосов
/ 05 октября 2011

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

 public bool EditMode
    {
        get { return (bool)(ViewState["editMode" + this.ID] ?? false); }
        set {ViewState["editMode" + this.ID] = value;} 
    }

Режим редактирования устанавливается во время события нажатия кнопки.

 public void shippingButton_Click(object sender, EventArgs e) 
    {
        if (((Button)sender).CommandName== "Edit")
        {
            ctrlShippingAddress.EditMode = true;
        }
        else
        {
            Page.Validate();
            if (Page.IsValid)
            {
                ctrlShippingAddress.SaveAddress();
                ctrlShippingAddress.EditMode = false;
            }
        }
    }

Я пытался вручную установить его при загрузке страницы, если я не добавлял его в состояние просмотрав правильной точке цикла страницы, но, как я понимаю, события происходят до рендера.Я также попытался добавить ViewStateMode = "Enabled" к элементу управления, затем к странице, использующей его, а затем к главной странице, не повезло.viewstate - это пустая коллекция (которая не имеет смысла, потому что она также сохраняет данные формы, которые сохраняются, как и должно).

Я ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

После проверки с коллегой я обнаружил, что проблема была в узле страниц web.config

<pages enableViewState="false"> 

необходимо установить в true

0 голосов
/ 05 октября 2011

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

Вышеприведенное может решить вашу проблему, но если нет, попробуйте что-то вроде этого:

public bool EditMode 
{ 
    get 
    { 
        bool editMode = false;
        if (ViewState["editMode"] != null)
            editMode = (bool)ViewState["editMode"];
        return editMode;
    } 
    set 
    {
        ViewState["editMode"] = value;
    }  
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...