我正在开发一个动态数据网站,但遇到了一堵墙。我有一个详细信息页面,可以在其中查看每个员工的详细信息,然后我有一个单独的页面来编辑每个员工。我这样做是因为我需要为每个部门的部门和工作使用 DropDownList 框。尽管如此,我在访问部门 ddl 时遇到了问题,我认为这是因为它在 EditItemTemplate 中。这是我所拥有的:

<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>

然后我尝试使用 ddlDept SelectedValue 来填充 ddlJob。这是我尝试使用的数据源。
<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>

我知道 Select 参数的格式是正确的,因为我使用另一个 ddl 来填充 DetailsView 并且我知道 Departments 和 JobCodes 之间的关系是正确的,因为我在 AddEmployee 页面中成功使用了它。

这是我得到的错误:

在 ControlParameter 'DeptID' 中找不到控件 'ddlDept'。

我假设它不能通过它的 ID 访问 ddlDept,因为它在 EditItemTemplate 中,我是正确的吗?我怎样才能解决这个问题?关于如何实现这一目标的其他建议?非常感谢任何和所有帮助。

最佳答案

我发现此链接有助于在没有服务器端的情况下解决:Solving the error "Could not find control 'xxx' in ControlParameter 'xxx'."

作者说可以使用美元字符( $ )来访问内部控件。

前任:
ControlID="dvEmployee$ddlDept"
将获得 ddlDept 的值,该值是 dvEmployee 的内部控制

关于asp.net - 在 EditItemTemplate 中的 ControlParameter 中找不到 Control,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10687972/

10-13 06:16