2010-12-13 6 views
2

Я включил несколько пользовательских элементов управления на одну страницу. Пользовательские элементы управления обычно имеют 2 разных вида, вид редактирования/по умолчанию и завершенное представление. Когда пользователь завершит редактирование, я переключу MultiView в законченное состояние. Этот шаблон работает хорошо на страницах.Внедрение нескольких пользовательских элементов управления на страницу?

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

Каковы некоторые простые способы сброса/исправления состояния многопользовательского режима? Я мог бы иметь функцию Reset() для каждого элемента управления, но мне кажется, что я могу избежать этого.

Update:

Эта страница предназначена, чтобы показать/просмотреть профиль учетной записи и имеет следующие части:

<asp:MultiView> 
...read only view 
<asp:EmailEditView> 
<asp:AccountEditView> 

и т.д ..

И тогда каждый из этих взглядов имеет пользовательский контроль. Внутри пользовательского элемента управления, у нас есть что-то вроде этого

<asp:multiview> 
<asp:view id="edit"/> 
<asp:view id="completed"/> 

я нашел следующие проблемы с этим дизайном:

  1. Когда пользователь завершает действие пользовательских элементов управления, таких как изменение по электронной почте. Вид остается в готовом состоянии, даже когда он возвращается к нему второй раз.

  2. Когда пользователь вернется к исходной форме, данные устарели. Эта конструкция действительно завинчивается с механизмом обратной передачи. Если я не использую IsPostBack в основной форме для данных, тогда мой выпадающий список на подформатах не будет работать. Однако, как только я добавляю! IsPostBack в основной форме, данные становятся устаревшими.

Я могу добавить «сбросить» флаг каждого пользовательского элемента управления и добавить что-то вроде этого

if ((!IsPostback) || (reset)) 

Как сбросить вид. В другом случае я могу добавить обработчик событий для загрузки перезагрузки/привязки данных, когда пользователь нажимает «назад», то есть там, где я меняю форму обратно.

+2

какой механизм вы используете для хранения, в каком состоянии ваши средства управления находятся в? можем ли мы увидеть какой-то код? –

+0

Я понятия не имею, что «Проблема в том, когда я возвращаюсь к главному виду/странице, тогда пользователь возвращает элемент управления, представление все еще находится в завершенном состоянии». означает. – Greg

+0

@Greg Я думаю, что вложение пользовательских элементов управления на страницу, подобную этой для редактирования формы, - плохая идея, потому что теперь я должен отслеживать состояние пользовательского элемента управления. –

ответ

0

Я пытаюсь воссоздать функциональность вашей проблемы, выбирая сложность пользовательских элементов управления. Вот моя догадка до сих пор (пожалуйста, поправьте меня, если я ошибаюсь)

<asp:MultiView runat="server" ID="MainMultiView" ActiveViewIndex="0"> 
    <asp:View runat="server" ID="DefaultView"> 
     Default View 
     <asp:Button runat="server" ID="EditEmailButton" Text="Edit Email" OnClick="EditEmailButton_Click" /> 
     <asp:Button runat="server" ID="EditAccountButton" Text="Edit Account" OnClick="EditAccountButton_Click" /> 
    </asp:View> 
    <asp:View runat="server" ID="EmailView"> 
     <asp:MultiView runat="server" ID="EmailMultiView" ActiveViewIndex="0"> 
      <asp:View runat="server" ID="EmailEditView"> 
       Edit Email 
       <asp:Button runat="server" ID="SaveEmailButton" Text="Save" 
        onclick="SaveEmailButton_Click" /> 
       <asp:Button runat="server" ID="CancelEmailButton" Text="Cancel" 
        onclick="CancelEmailButton_Click" /> 
      </asp:View> 
      <asp:View runat="server" ID="EmailCompleteView"> 
       Email Edit Complete! 
      </asp:View> 
     </asp:MultiView> 
    </asp:View> 
    <asp:View runat="server" ID="AccountView"> 
     <asp:MultiView runat="server" ID="AccountMultiView" ActiveViewIndex="0"> 
      <asp:View runat="server" ID="AccountEditView"> 
       Edit Account 
       <asp:Button runat="server" ID="SaveAccountButton" Text="Save" 
        onclick="SaveAccountButton_Click" /> 
       <asp:Button runat="server" ID="CancelAccountButton" Text="Cancel" 
        onclick="CancelAccountButton_Click" /> 
      </asp:View> 
      <asp:View runat="server" ID="AccountCompleteView"> 
       Account Edit Complete! 
      </asp:View> 
     </asp:MultiView> 
    </asp:View> 
</asp:MultiView> 

- код за

protected void EditEmailButton_Click(object sender, EventArgs e) 
{ 
    MainMultiView.SetActiveView(EmailView); 
} 

protected void EditAccountButton_Click(object sender, EventArgs e) 
{ 
    MainMultiView.SetActiveView(AccountView); 
} 

protected void SaveEmailButton_Click(object sender, EventArgs e) 
{ 
    // Save(); 
    EmailMultiView.SetActiveView(EmailCompleteView); 
} 

protected void CancelEmailButton_Click(object sender, EventArgs e) 
{ 
    EmailMultiView.SetActiveView(EmailCompleteView); 
} 

protected void SaveAccountButton_Click(object sender, EventArgs e) 
{ 
    // Save(); 
    AccountMultiView.SetActiveView(AccountCompleteView); 
} 

protected void CancelAccountButton_Click(object sender, EventArgs e) 
{ 
    AccountMultiView.SetActiveView(AccountCompleteView); 
} 
+0

Как только я нажимаю «Сохранить» или «Отменить», я не могу вернуться к представлению по умолчанию, чтобы выбрать другой вид. Возможно, вы могли бы опубликовать http://www.screentoaster.com/ своей страницы и ее рабочий процесс? – Greg

+0

Нет, я могу «вернуться» к основной форме.Однако помните, что у него будет что-то подобное, если! Postback. Таким образом, данные не будут загружаться. Посмотрите мое обновление, как я его обрабатываю. –

+0

Я добавил метод Reset() для каждого пользовательского элемента управления, который вызывается до вызова пользовательского элемента управления. Это обновляет форму и задает логическое значение и на странице Load, если (! Postback) || (ifReset) - это также необходимо для перезагрузки данных на пользовательских элементах управления. –

Смежные вопросы