2010-12-13 53 views
2

我已經將多個用戶控件嵌入到同一頁面中。用戶控件通常有2個不同的視圖,一個編輯/默認視圖和一個完整的視圖。當用戶完成編輯時,我將MultiView切換到完成狀態。這種模式在頁面中可以正常工作。將多個用戶控件嵌入到頁面中?

問題是當我回到主視圖/頁面然後用戶帶回控件時,視圖仍處於完成狀態。

什麼是一些簡單的方法來重置/糾正多視圖狀態?我可以在每個控件上都有一個Reset()函數,但感覺我可能會避免這種情況。

更新:

本頁面旨在顯示賬號/縱斷面圖,它有以下幾個部分:

<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

代碼?我們可以看到一些代碼嗎? – 2010-12-13 20:56:11

+0

我不知道什麼「問題是當我回到主視圖/頁面,然後用戶帶回控件,視圖仍處於完成狀態。」手段。 – Greg 2010-12-13 21:22:15

+0

@Greg我認爲將用戶控件嵌入到這樣的頁面中用於表單編輯是一個壞主意,因爲現在我必須跟蹤用戶控件的狀態。 – 2010-12-13 21:25:01

回答

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 2010-12-14 16:02:23

+0

不,我可以「回到」主窗體。但是,請記住,如果發回,它會產生這種效果。所以數據不會加載。查看我的更新,瞭解我如何處理它。 – 2010-12-14 21:11:49

+0

我給調用用戶控件之前調用的每個用戶控件添加了一個Reset()方法。這更新表單並設置一個布爾值和PageLoad,我有if(!Postback)|| (ifReset) - 也需要重新加載用戶控件上的數據。 – 2010-12-14 21:13:20

相關問題