2012-11-25 32 views
0

我被困在如何在Webforms應用程序中維護動態添加的用戶控件的視圖狀態。我已經創建了一個名爲Set.ascx用戶控制:在ASP.net中維護動態添加的控件

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Set.ascx.cs" Inherits="CustomControlLab.Set" %> 
&nbsp 
<asp:Label ID="BodyArea" CssClass="SetLabel" runat="server" Text="Label"></asp:Label> 
&nbsp 
<asp:Label ID="Exercise" CssClass="SetLabel" runat="server" Text="Label"></asp:Label> 
&nbsp 
<asp:Label ID="SetNo" CssClass="SetLabel" runat="server" Text="Label"></asp:Label> 
&nbsp 
<asp:Label ID="Reps" CssClass="SetLabel" runat="server" Text="Label"></asp:Label> 

用戶將選擇從下拉列表中的項目,以每個標籤的設定值。這是坐落在一個按鈕單擊事件如下:

protected void AddExercise_Click(object sender, EventArgs e) 
    { 
      Set set = (Set)Page.LoadControl("Set.ascx"); 
      int currentSet = (int)ViewState["Sets"]; 
      set._bodyArea = AreaSelect.SelectedValue; 
      set._exercise = ExerciseSelect.SelectedValue; 
      set._reps = RepNumbers.SelectedValue; 
      set._setNumber = currentSet.ToString(); 
      int idCount = (int)ViewState["Sets"]; 
      set.ID = string.Format("set{0}", idCount); 
      currentSet++; 
      ViewState["Sets"] = currentSet; 
      WeightList.Controls.Add(set); 
    } 

這正確添加我的用戶控制我的面板控制WeightList。我無法解決的是如何在頁面初始化事件中成功地重新創建這些控件?我認爲這是與控制ID有關?或者,也許我的方法永遠不會工作。任何反饋將真的有幫助!

以下Tims評論我不知道如何使用ID重新加載UserCOntrol。我想這在Page_Load事件後是否回:

 else 
     { 
      if(ViewState["Sets"] != null) 
      { 
      int sets = (int)ViewState["Sets"]; 
      for (int i = 0; i < sets; i++) 
      { 
       Set set = new Set(); 
       set = (Set)Page.FindControl(string.Format("MainContent_set{0}", i + 1)); 
       WeightList.Controls.Add(set); 

      } 
      } 


     } 

但它不重新創建集對象。望着當它被加載每組UC頁面呈現如下:

&nbsp 
<span id="MainContent_set1_BodyArea" class="SetLabel">All Exercises</span> 
&nbsp 
<span id="MainContent_set1_Exercise" class="SetLabel">Bench Press</span> 
&nbsp 
<span id="MainContent_set1_SetNo" class="SetLabel">1</span> 
&nbsp 
<span id="MainContent_set1_Reps" class="SetLabel">3</span> 

在控制每個標籤具有其值設置的公共屬性:

public partial class Set : System.Web.UI.UserControl 
{ 
    public string _exercise { get { return Exercise.Text; } set { Exercise.Text = value; } } 
    public string _bodyArea { get { return BodyArea.Text; } set { BodyArea.Text = value; } } 
    public string _setNumber { get { return SetNo.Text; } set { SetNo.Text = value; } } 
    public string _reps { get { return Reps.Text; } set { Reps.Text = value; } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

下面是什麼渲染頁面不過,我覺得我可以做以下(這不工作!)

 else 
    { 
     if(ViewState["Sets"] != null) 
     { 
     int sets = (int)ViewState["Sets"]; 
     for (int i = 0; i < sets; i++) 
     { 
      Set set = new Set(); 
      Label templbl = (Label)Page.FindControl(string.Format("MainContent_set{0}_BodyArea", i + 1)); 
      set._bodyArea = templbl.Text; 
      //Other code to get rest of control values 
      WeightList.Controls.Add(set); 

     } 
     } 


    } 

但這也不管用。我想我在這裏錯過了一些明顯的東西?只要你有頁面,則值將從視圖狀態爲你裝上用正確的ID的控制

if(ViewState["Sets"] != null) 
{ 
    int sets = (int)ViewState["Sets"]; 
    for (int i = 0; i < sets; i++) 
    { 
     Set set = new Set(); 
     set.ID = string.Format("set{0}", i); 
     WeightList.Controls.Add(set); 
    } 
} 

:在你的頁面加載

+0

你只需要用正確的ID(計數變量)重新創建它。 –

回答

0

試試這個。

+0

感謝您的建議,儘管我已經嘗試過,但這不起作用。難道是因爲我沒有在OnInit事件中加入他的控制權? – Luthervd

+0

@Luthervd試試看看會發生什麼。正確數量的控件得到渲染嗎? – RobH