J'ai un contrôle de zone de liste. Lorsque l'utilisateur clique dessus, il indique à un contrôle personnalisé d'utiliser un certain identifiant à utiliser.Résolution des conflits viewstate/namespace
Le contrôle personnalisé dessine la même chose à chaque fois (dynamiquement), il charge juste le contenu différent en fonction de cet ID (il est chargé à partir d'une base de données dans un formulaire dynamique comme le contrôle).
Ok, Maintenant, j'ai des problèmes avec le déversement de viewstate. Lorsque vous cliquez sur la zone de liste pour charger l'ID # 1, tout ira bien. Ensuite, vous cliquez sur ID # 2 et tous les contrôles de zone de texte créés à l'intérieur du contrôle personnalisé ont la même chose qui a été mis dans l'ID # 1. Donc, lorsque l'index de la liste change, je dois effacer l'état de la vue, mais je n'arrive pas à le faire fonctionner.
Tous les contrôles sont créés sur Page_Load également.
J'ai essayé ViewState.Clear() à Page_Load mais cela n'a rien fait.
Le contrôle personnalisé dérive de INamingInterface, mais je suppose que les ID correspondent toujours à viewstate.
J'ai essayé de changer l'ID des contrôles personnalisés pour quelque chose d'unique (comme "CONROL _" + id.ToString()) J'ai aussi essayé de faire la même chose avec le panneau contenant le contrôle personnalisé. Je n'arrive pas à me débarrasser de cet état de vue!
EDIT Ok est le code ici qui illustre le problème
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (ddl.SelectedValue == "1")
{
Create("ID #1");
}
else if (ddl.SelectedValue == "2")
{
Create("ID #2");
}
}
void Create(string text)
{
TextBox t = new TextBox();
t.Text = text;
pnl.Controls.Add(t);
}
}
le balisage:
<div>
<asp:Panel ID="pnl" runat="server">
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True">
<asp:ListItem Text="id 1" Value="1">
</asp:ListItem>
<asp:ListItem Text="id 2" Value="2"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
</div>
Si vous exécutez ce code, vous remarquerez que si vous changez ce qui est dans la zone de texte et alors vous changez la liste déroulante, alors ce que vous avez tapé plus tôt sera gardé là au lieu d'être écrasé ..
Mon objectif de base avec ceci est de faites en sorte que lorsque vous changez d'ID # 2, il place "ID # 2" dans la zone de texte quoi que ce soit (de préférence sans désactiver viewstate)
Pourriez-vous ajouter du code pour nous illustrer vos problèmes? –
Cela vous aide-t-il? – Earlz