HiddenField.Value - пустая строка при обратной передаче в моем пользовательском элементе управления. - PullRequest
2 голосов
/ 17 января 2011

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

Я выполняю на стороне клиента манипуляции со скрытыми значениями полей и проверил в firebug, что поля верны, прежде чем выдавать сообщение обратно

Вот настройка:

public class DualListPanel : SWebControl, INamingContainer

    {

        protected IList<DlpItem> UnassignedList { get; set; }
        protected IList<DlpItem> AssignedList { get; set; }
        private HiddenField assignedItemsField, unassignedItemsField;

        public DualListPanel()
        {
            CssClass = "DualListPanel";
            EnableViewState = true;
        }

        #region ViewState

        protected override void LoadViewState(object savedState)
        {
            var state = savedState as object[];
            UnassignedList =   state[0] as List<DlpItem>;
            AssignedList = state[1] as List<DlpItem>;
            base.LoadViewState(state[2]);
        }

        protected override object SaveViewState()
        {
            object[] state = new object[3];
            state[0] = UnassignedList;
            state[1] = AssignedList;
            state[2] = base.SaveViewState();
            return state;
        }

        #endregion

        #region WebControl Overrides


        protected override void OnInit(EventArgs e)
        {
            EnsureChildControls();
            GetUnassignedList(); //omitted method
            GetAssignedList(); //omitted method
            base.OnInit(e);
        }

        protected override void CreateChildControls()
        {          
            assignedItemsField = new HiddenField();
            assignedItemsField.ID = "HiddenAssignedItems";
            assignedItemsField.EnableViewState = true;

            unassignedItemsField = new HiddenField();
            unassignedItemsField.ID = "HiddenUnassignedItems";
            unassignedItemsField.EnableViewState = true;

            Controls.Add(assignedItemsField);
            Controls.Add(unassignedItemsField);
            base.CreateChildControls();
        }

        #endregion

        #region Item Lists Retrieval

        public string GetCommaDelimUnassignedItems()
        {
            return unassignedItemsField.Value;
        }

        public string GetCommaDelimAssignedItems()
        {
            return assignedItemsField.Value;
        }

        #endregion
    }

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Я думаю, что значение скрытого поля не теряется при обратной передаче, Поместите свой код в Ispostback всякий раз, когда вы инициализируете скрытые поля.

protected override void CreateChildControls()         
{                      
 if(!ispostback){
 assignedItemsField = new HiddenField();     
 assignedItemsField.ID = "HiddenAssignedItems";
 assignedItemsField.EnableViewState = true;          
 unassignedItemsField = new HiddenField();           
 unassignedItemsField.ID = "HiddenUnassignedItems"; 
 unassignedItemsField.EnableViewState = true;      
 Controls.Add(assignedItemsField);             
 Controls.Add(unassignedItemsField);          
 base.CreateChildControls();      
}
 }
1 голос
/ 17 января 2011

Тьфу Я опустил информацию, которая была бы полезна. Я прежде всего проверял, смогу ли я получить доступ к значениям в процессе цикла страницы. Не обязательно со страницы вызова GetCommaDelimUnassignedItems ();

Я понял, что реализовал OnInit () и сделал вызовы, чтобы проверить значение (я пропустил его, думая, что это бесполезно для проблемы). Полностью забыл, что ViewState не будет загружаться во время OnInit (). Я изменил его на OnPreRender (), и теперь он работает нормально

0 голосов
/ 17 января 2011

Похоже, вам просто нужно отметить 2 скрытых поля protected вместо private.

...