Создайте пользовательскую метку, которая реализует IPostBackDataHandler - PullRequest
1 голос
/ 18 ноября 2011

Я хочу создать метку, которая реализует IPostBackDataHandler, потому что я хочу изменить текст с помощью JavaScript.Если после этого я активирую обратную передачу, мой текст исчезнет.

Код, который у меня уже есть, таков:

public class CustomLabel : Label, IPostBackDataHandler
{
  protected override void OnPreRender(EventArgs e)
  {
    base.OnPreRender(e);

    if (Page != null)
      Page.RegisterRequiresPostBack(this);
  }

  public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
  {
    this.Text = postCollection[postDataKey];
    return true;
  }

  public void RaisePostDataChangedEvent()
  {
    //throw new NotImplementedException();
  }
}

Он не работает вообще, я не понимаю, как я должен увидеть, что текст изменился и PostCollection [postDataKey]всегда ноль.

1 Ответ

1 голос
/ 18 ноября 2011

Интерфейс IPostBackDataHandler предназначен для входов. Такие элементы, как span и div не сохраняются в объекте запроса. Я бы просто реализовал необходимые методы управления ViewState. Вот пример из пользовательского компонента сетки, который я разработал:

protected override void LoadViewState(object savedState)
{
    if (savedState != null)
    {
        object[] state = (object[])savedState;

        if (state[0] != null)
            base.LoadViewState(state[0]);
        if (state[1] != null)
            ((IStateManager)ItemStyle).LoadViewState(state[1]);
        if (state[2] != null)
            ((IStateManager)headerStyle).LoadViewState(state[2]);
        if (state[3] != null)
            ((IStateManager)AlternatingItemStyle).LoadViewState(state[3]);
    }
}

protected override object SaveViewState()
{
    object[] state = new object[4];

    state[0] = base.SaveViewState();
    state[1] = itemStyle != null ? ((IStateManager)itemStyle).SaveViewState() : null;
    state[2] = headerStyle != null ? ((IStateManager)headerStyle).SaveViewState() : null;
    state[3] = alternatingItemStyle != null ? ((IStateManager)alternatingItemStyle).SaveViewState() : null;

    return state;
}

protected override void TrackViewState()
{
    base.TrackViewState();

    if (itemStyle != null)
        ((IStateManager)itemStyle).TrackViewState();
    if (headerStyle != null)
        ((IStateManager)headerStyle).TrackViewState();
    if (alternatingItemStyle != null)
        ((IStateManager)alternatingItemStyle).TrackViewState();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...