De Contrôle De L'Utilisateur À L'Intérieur De Répéteur
J'ai un UserControl à l'intérieur d'un répéteur. La répétition de la source de données est à partir de SQL Server.
De Contrôle de l'utilisateur .cs - MoviePanel.ascx.cs:
public int myMovieID { get; set; }
public string myMovieName { get; set; }
public string myMovieDescription { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
MovieIDLbl.Text = myMovieID.ToString();
MovieNameLbl.Text = myMovieName;
DescriptionLbl.Text = myMovieDescription;
}
Page ASPX:
<asp:Repeater ID="Repeater1" DataSourceID="ListOfMoviesDS" runat="server">
<ItemTemplate>
<uc1:MovieDetailPanel runat="server" myMovieID='<%# Eval("MovieID") %>'
myMovieName='<%# Eval("movieName") %>'
myMovieDescription='<%# Eval("movieDescription") %>'
id="MovieDetailPanel1" />
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("MovieID") %>'></asp:Label>
<asp:Label ID="Label2" runat="server"
Text='<%# Eval("movieName") %>'></asp:Label>
<asp:Label ID="Label3" runat="server"
Text='<%# Eval("movieDescription") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
Ici quelque chose de très étrange se passe. Les valeurs ne sont pas passé à l'objet UserControl. Cependant, si je place les Étiquettes au-dessous de l'objet usercontrol et texte avec Eval()
il fonctionne. Vous pourriez penser que le usercontrol pourrait être le problème. Mais si j'manuellement, tapez quelque chose, dire à la place de <%# Eval("movieName") %>
celui-ci est transmis à l'utilisateur de contrôler et il est affiché.
Je n'ai PAS la moindre IDÉE! Si le problème est avec la fonction Eval() les Étiquettes ne doivent pas recevoir le texte. Ou si le problème est avec le UserControl mon manuel de texte ne devrait pas avoir de passé. Je n'ai aucune idée de pourquoi Eval()'s des valeurs n'est pas d'atteindre le UserControl.
À la différence des sites de forum, nous n'utilisons pas de "Merci", ou "Toute aide appréciée", ou des signatures sur Stack Overflow. Voir "Doit 'Bonjour', 'merci,' slogans, et les salutations être supprimé de postes?.
À quel moment dans le cycle de vie de page êtes-vous de vérifier pour voir si les valeurs sont définies? Vous utilisez des expressions de liaison de données, de sorte que ceux-ci seront définis lors de la
DataBinding
phase.Je vérifie sur l'événement PageLoad de l'objet UserControl(comme illustré dans l'exemple ci-dessus). Est-ce mal ?
Votre question fait sens pour moi. Pouvez-vous me dire comment suis-je censé détenir le contrôle jusqu'à ce que les valeurs sont définies liée ? Je veux dire, est-il une fonction d'événement que je peux ajouter pour obtenir les valeurs au lieu de le faire à partir de Page_Load() ?
OriginalL'auteur user1220169 | 2013-11-22
Vous devez vous connecter pour publier un commentaire.
Votre code fonctionne très bien; je l'ai testé (voir en bas de la page). Le pire des cas vous pouvez essayer de l'affectation de ces valeur à l'intérieur de ItemDataBound événement.
Voici comment je l'ai tester votre question initiale
Il se pourrait que l'OP veut séparer la logique métier avec d'autres contrôles.
OriginalL'auteur Win
ici est une façon de le faire dans le code derrière. Je ne peux pas dire que c'est la meilleure pratique, mais c'est propre. Vous utilisez le ItemDataBind événement, la fonte de l'élément de ce que vous voulez, datatable, que ce soit, puis créer une nouvelle instance de l'utilisateur le contrôle et l'ajouter à la répétition du contrôle de la collecte
Source de la Page
Page html
de contrôle de l'utilisateur
et
OriginalL'auteur Rob Allen