12

動的データ Web サイトで作業していて、壁にぶつかりました。各従業員の詳細を確認できる詳細ページと、各従業員を編集するための個別のページがあります。これを行ったのは、各部門の部門と役職に 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 を設定しようとしています。これが私が使用しようとしている DataSource です。

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

別の ddl を使用して DetailsView にデータを入力しているため、Select パラメーターの形式が正しいことがわかります。また、Departments と JobCodes の関係が正しく、AddEmployee ページで正常に使用されていることもわかっています。

これが私が得るエラーです:

ControlParameter 'DeptID' にコントロール 'ddlDept' が見つかりませんでした。

EditItemTemplate にあるため、ID で ddlDept にアクセスできないと仮定して正しいですか? どうすればこれを修正できますか? これを達成する方法に関する他の提案はありますか?どんな助けでも大歓迎です。

4

6 に答える 6

19

このリンクはサーバー側なしで解決するのに役立つことがわかりました:「ControlParameter'xxx'にコントロール'xxx'が見つかりませんでした」というエラーを解決します。

著者は、ドル文字($)を使用して内部コントロールにアクセスできると述べています。

元:

ControlID="dvEmployee$ddlDept"

dvEmployeeの内部コントロールであるddlDeptの値を取得します

于 2012-07-25T15:40:41.780 に答える
4

あなたの仮定は正しいです。<ControlParameter> は別の にあるため、ddlDept を認識しませんContentTemplate

これを回避する 1 つの方法は<ControlParameter>、マークアップから を削除し、実行時にプログラムで追加して、ddlDept の実際のUniqueIDプロパティを使用できるようにすることです。

このようなもの:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Create your ControlParameter
        ControlParameter deptParam = new ControlParameter();
        deptParam.ControlID = ddlDept.UniqueID;
        deptParam.PropertyName = "SelectedValue";
        deptParam.Name = "DeptID";
        deptParam.Type = TypeCode.Int32;
        // Add it to your SelectParameters collection
        JobDDLds.SelectParameters.Add(deptParam);
    }
}
于 2012-05-21T15:44:39.770 に答える
3

DetailsView または GridView コントロールのコンテキスト内でコントロールを検索するデータ ソース オブジェクトに関するこの問題を回避するために私が見つけた 1 つの方法は、参照したいコントロールを含む項目/編集項目テンプレート内にデータ ソース コントロールを実際に配置することです。 . これはすべての状況に適しているとは限りませんが、確実に機能します。

于 2015-06-28T02:55:02.277 に答える
2

もう 1 つのオプションは、ドロップダウンリストのクライアント ID モードを静的に設定することです。その後、ドロップダウン リスト ID は変更されません。

 ClientIDMode="Static"

ありがとう、

エセン。

于 2012-12-13T18:24:16.703 に答える