Доступ к CommandEventArgs в пределах PageLoad - PullRequest
1 голос
/ 05 октября 2009

Я использую c # .net

У меня есть повторитель в представлении (MultiView), каждая строка содержит кнопку «Редактировать» (в CommandArgument хранится идентификатор типа).

<asp:Button ID="buttonClick" OnCommand="ButtonClick" CommandArgument='<%#Eval("ID")%>' runat="server" Text="Edit"/>

Когда пользователь нажимает кнопку «Редактировать», он переходит в другое представление (представление «Изменить»).

В зависимости от того, какой тип Eval («ID») выбран, должен отображаться другой UserControl.

Я заметил, что если постбэк происходит в той же форме (вид Edit), он теряет свое состояние для динамического элемента управления. Поэтому я думаю, что мне нужно получить доступ / заполнить DIV (appViewArea) через Page_Load.

В моей Page_Load я хочу, чтобы он заполнял DIV правильным UserControl, только если пользователь получил доступ к представлению редактирования. Вот что у меня сейчас есть в моей Page_Load.

if(_multiView1.ActiveViewIndex == 1) // This is the Edit View
{
  int typeId = Convert.ToInt32(viewAppointmentID.Value); // viewAppointmentID is a hidden field which is created within the ButtonClick method.

switch (typeId)
{
  case 1:
        {
          var control = Page.LoadControl("~/editBirthAppointment.ascx");
          appViewArea.Controls.Add(control); 
        }
        break;
  case 2:
        {
          var control = Page.LoadControl("~/editDeathAppointment.ascx");
          appViewArea.Controls.Add(control); 
        } 
        break;
}
}

protected void ButtonClick(object sender, CommandEventArgs e)
{
   var viewAppointmentID = Convert.ToInt32(e.CommandArgument);
   _multiView1.ActiveViewIndex = 1;
}

Моя проблема заключается в том, что он никогда не входит в описание if (_mutliview) и также не хранит viewAppointmentID. Я посмотрел в Интернете, но не могу найти ничего, что действительно поможет мне. Я получаю к нему неправильный путь?

Заранее спасибо за любую помощь.

Спасибо

Clare

Ответы [ 2 ]

0 голосов
/ 09 октября 2009

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

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

вам нужна не page_load, а событие oncommand из сетки, и в этом случае вы проверяете имя команды и / или аргументы команды

кажется, что вы должны использовать

  if(!Page.IsPostback())
       // fill grid here

и в событии onRowCommand вы можете добавить пользовательские элементы управления на страницу

...