Ne pouvait pas trouver de Contrôle dans ControlParameter à l'intérieur de EditItemTemplate
Je suis en train de travailler sur une Dynamique de Données site web et j'ai couru dans un mur. J'ai une page de Détails où les détails pour chaque employé peut être vu, et puis j'ai une page distincte pour modifier chaque employé. Je l'ai fait parce que j'ai besoin d'utiliser DropDownList boîtes pour le Ministère et l'Emploi dans chaque département. Néanmoins, j'ai de la difficulté d'accéder au département ddl et je pense que c'est parce qu'il est à l'intérieur d'un EditItemTemplate. Voici ce que j'ai:
<asp:DetailsView ID="dvEmployee"
DataSourceID="EmpDVds"
AutoGenerateRows="false"
DataKeyNames="Id"
GridLines="None"
CellSpacing="10"
runat="server" DefaultMode="Edit">
<Fields>
<asp:TemplateField HeaderStyle-Font-Bold="true" HeaderText="Department: ">
<EditItemTemplate>
<asp:DropDownList ID="ddlDept" DataSourceID="DeptDDLds" DataTextField = "DepartmentName" DataValueField = "Id" runat="server" SelectedValue='<%#Bind("DeptID") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-Font-Bold="true" HeaderText="Job Code: ">
<EditItemTemplate>
<asp:DropDownList ID="ddlJob" DataSourceID="JobDDLds" DataTextField = "JobName" DataValueField = "Id" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Fields>
Alors je suis en train d'utiliser le ddlDept SelectedValue pour remplir la ddlJob. Voici la source de données, je suis en train d'utiliser.
<asp:SqlDataSource ID="JobDDLds"
SelectCommand="
SELECT
Id,
Code+' - '+[Desc] AS JobName,
Department_Id
FROM
JobCodes
WHERE
JobCodes.Department_Id = @DeptID"
ConnectionString="<%$ConnectionStrings:TrainingDatabaseConnection %>" runat="server" >
<SelectParameters>
<asp:ControlParameter ControlID="ddlDept" PropertyName="SelectedValue"
Name="DeptID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
Je sais que le format de l'Sélectionnez paramètre est correct parce que je suis en utilisant un autre ddl pour remplir le contrôle DetailsView et je sais que la relation entre les Départements et le code d'emploi est correct parce que je suis de l'utiliser avec succès et AddEmployee page.
Voici l'erreur que je reçois:
Ne pouvait pas trouver de contrôle "ddlDept" dans ControlParameter 'DeptID'.
Je suis-je raison de supposer qu'il ne peut pas accéder à la ddlDept par l'ID parce que c'est dans la EditItemTemplate? Comment puis-je résoudre ce problème? D'autres suggestions sur la façon de réaliser cet objectif? Toute aide est grandement appréciée.
OriginalL'auteur Tyler Mortensen | 2012-05-21
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ce lien permet de régler sans côté serveur: Résolution de l'erreur "impossible de trouver le contrôle" xxx " dans ControlParameter 'xxx'."
l'auteur dit que vous pouvez utiliser le dollar char ($) pour accéder au contrôle interne.
Ex:
ControlID="dvEmployee$ddlDept"
obtenez la valeur de ddlDept qui est un contrôle intérieur de dvEmployee
C'est une excellente solution. Exactement ce que je recherchais.
Cela ne fonctionne que si le DOM peut le voir. Sinon, c'est le même problème
OriginalL'auteur Rodrigo Reis
Votre hypothèse est correcte; la
<ControlParameter
> ne reconnaît pas votre ddlDept parce que c'est dans un autreContentTemplate
.Une façon de contourner cela est d'enlever le
<ControlParameter>
de votre balisage et l'ajouter par programmation au moment de l'exécution, de sorte que vous pouvez utiliser ddlDept réelleUniqueID
de la propriété.Quelque chose comme ceci:
Hey, @CodeMaverick - haut-voté réponse sur cette question est une bonne solution que je connais fonctionne que si vous avez accès à l'annotation. Si vous voulez dire que le client en JavaScript, vous devrez peut-être un peu plus créatif. Le serveur d'identification généré pour les listes déroulantes contiendra le côté serveur ID, vous pouvez utiliser le "attribut contient sélecteur" pour obtenir toutes les listes déroulantes, puis itérer à travers eux, le réglage de la bonne valeur sélectionnée en fonction du contexte (de frère, de contrôle, etc).
OriginalL'auteur jadarnel27
Un moyen que j'ai trouvé pour contourner ce problème avec des objets de source de données à la recherche pour les contrôles à l'intérieur du contexte d'un DetailsView ou de contrôle GridView est en fait de placer le contrôle de source de données à l'intérieur de l'élément/modifier l'élément de modèle qui a le contrôle que vous souhaitez référencer. Cela peut ne pas être idéal pour toutes les situations, mais il fonctionne certes.
OriginalL'auteur Glenn
Est une autre option, définissez votre dropdownlist id du client, le mode statique. Ensuite, votre dropdownlist id ne sera pas modifié.
Merci,
Esen.
OriginalL'auteur Esen
Assurez-vous que votre contrôle d'intérêt a runat="server". Argh.
OriginalL'auteur CindyH
si tu parles gridview (ajouter un nouveau bouton d'enregistrement)
utilisation
au lieu de
OriginalL'auteur eissa albahri