2010-02-24 38 views
0

J'ai une liste de noms de paramètres pour lesquels je veux un utilisateur de saisir certaines valeurs, donc je le fais:utilisant répéteur pour une forme actualisable

<div> 
    <asp:Repeater runat="server" ID="rptTemplateParams" EnableViewState="true"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <asp:Label runat="server"><%#Container.DataItem%></asp:Label> 
      <asp:TextBox runat="server" ID="textParamValue"></asp:TextBox> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
    </asp:Repeater> 
</div> 
<asp:Button runat="server" ID="Send" Text="Send Email" OnClick="Send_Click" /> 

et sur le côté serveur:

void Page_Load(...) 
{ 
    rptTemplateParams.DataSource =Params; // Params is List<string> 
    rptTemplateParams.DataBind(); 
} 



public void Send_Click(object sender, EventArgs e) 
{ 
    ParamDict = new Dictionary<string, string>(); 
    foreach (RepeaterItem item in rptTemplateParams.Items) 
    { 
    if (item.ItemType == ListItemType.Item) 
    { 
     TextBox textParamValue = (TextBox)item.FindControl("textParamValue"); 
     if (textParamValue.Text.Trim() != String.Empty) 
     { 
      // IT NEVER GETS HERE - textParamValue.Text IS ALWAYS EMPTY!!! 

      ParamDict.Add(item.DataItem.ToString(), textParamValue.Text); 
     } 
    } 
    } 
} 

Comme je l'ai mis dans le commentaire, je ne peux pas récupérer les valeurs de la zone de texte - ils sont toujours vides. Est-ce que je récupère ceux au mauvais endroit?

Merci! Andrey

Répondre

2

Essayez de modifier votre page_load comme celui-ci

if(!Page.IsPostBack) 
{ 
    rptTemplateParams.DataSource =Params; // Params is List<string> 
    rptTemplateParams.DataBind(); 

} 

Le databinding efface les contrôles existants et les remplacer par de nouveaux contrôles vides. Vous ne voulez que connecter des données lorsque cela est nécessaire.

1

essayez ceci:

void Page_Load(...) 
{ 
    if (!IsPostBack) 
    { 
     rptTemplateParams.DataSource =Params; // Params is List<string> 
     rptTemplateParams.DataBind(); 
    } 
}