Konnte nicht finden, Kontrolle in ControlParameter innen EditItemTemplate
Arbeite ich an einer Dynamic Data-website, und ich habe in eine Wand laufen. Ich habe eine Details-Seite, wo Sie die details für die einzelnen Mitarbeiter gesehen, und dann habe ich eine separate Seite zu editieren jedes einzelnen Mitarbeiters. Ich Tat dies, weil ich DropDownList-Boxen für die Abteilung und Arbeit in jeder Abteilung. Dennoch, ich habe Probleme beim Zugriff auf die Abteilung, die ddl-und ich denke, dass es ist, weil es in einem EditItemTemplate. Hier ist, was ich habe:
<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>
Dann bin ich versucht, die ddlDept SelectedValue zum Auffüllen der ddlJob. Hier ist die DataSource, die ich versuche zu verwenden.
<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>
Ich weiß, dass das format der Select-parameter ist korrekt, da bin ich mit einem anderen ddl-zum Auffüllen der Detailansicht und ich weiß, dass die Beziehung zwischen den Abteilungen und JobCodes ist richtig, denn ich verwende es erfolgreich in und AddEmployee Seite.
Hier ist die Fehlermeldung die ich bekomme:
Konnte nicht finden, kontrollieren 'ddlDept' in ControlParameter 'DeptID'.
Ich bin ich richtig in der Annahme, dass es keinen Zugriff auf die ddlDept, indem es die ID, denn es ist im EditItemTemplate? Wie kann ich dieses Problem beheben? Andere Vorschläge, wie dies zu erreichen? Jegliche Hilfe wird sehr geschätzt.
InformationsquelleAutor Tyler Mortensen | 2012-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich diesen link gefunden, hilft bei der Lösung ohne server-Seite: Die Lösung der Fehler "Konnte nicht gefunden Steuerelement 'xxx' in ControlParameter 'xxx'."
der Autor sagt, dass Sie verwenden können die dollar-Zeichen ($) auf die innere Steuerung.
Ex:
ControlID="dvEmployee$ddlDept"
wird der Wert von ddlDept, ist eine innere Kontrolle der dvEmployee
Dies ist eine großartige Lösung. Genau das, was ich nach.
Dies funktioniert nur, wenn der DOM es sehen können. Ansonsten ist es das gleiche problem
InformationsquelleAutor Rodrigo Reis
Ihre Annahme ist korrekt; die
<ControlParameter
> nicht erkennen, Ihre ddlDept, weil es in einem anderenContentTemplate
.Einen Weg, dieses Problem zu umgehen, entfernen Sie die
<ControlParameter>
von markup und fügen Sie es programmgesteuert zur Laufzeit, so dass Sie verwenden können, ddlDept tatsächlichenUniqueID
Eigenschaft.Etwas wie dieses:
Hey, @CodeMaverick - top-stimmten Antwort auf diese Frage wurde eine gute Lösung, dass weiß ich arbeiten, wenn Sie Zugriff auf das markup. Wenn du meinst client-Seite in JavaScript, die Sie haben können, um ein bisschen mehr kreativ. Der server generierte ID für die dropdown-Listen enthalten die server-Seite-ID, so können Sie mit der " - Attribut enthält Selektor", um alle dropdowns, und dann Durchlaufen Sie, die richtige Einstellung gewählte Wert auf der Grundlage von Kontext (Geschwister-Kontrollen, etc).
InformationsquelleAutor jadarnel27
Einen Weg, den ich gefunden habe, um dieses Problem mit data source-Objekten suchen, für die Steuerelemente im Kontext einer DetailsView-oder GridView-Steuerelement ist tatsächlich die Datenquelle-Steuerelement in das Element/Element Bearbeiten, Vorlage, hat die Steuerelemente, die Sie wollen, zu verweisen. Dies ist möglicherweise nicht für alle Situationen ideal, aber es funktioniert sicherlich.
InformationsquelleAutor Glenn
Andere Möglichkeit ist, setzen Sie Ihre dropdownlist-client-id-Modus auf, statisch zu sein. Dann ist dein dropdownlist id wird nicht geändert.
Dank,
Esen.
InformationsquelleAutor Esen
Stellen Sie sicher, Ihre Kontrolle der Interesse hat runat="server". Argh.
InformationsquelleAutor CindyH
wenn Sie reden über gridview (neuen Datensatz hinzufügen-Schaltfläche)
verwenden
statt
InformationsquelleAutor eissa albahri