找不到控件';MainContent_DropDownList1';在ControlParameter
本文关键字:ControlParameter DropDownList1 MainContent 控件 找不到 | 更新日期: 2023-09-27 18:20:50
我正在调试,我得到了上面列出的奇怪错误。这很奇怪,因为我的DropDownlist1。当我早些时候将它设置为等于这个值时,调试器告诉我它不能将它强制转换为字符串。
这是我的C#,问题就在这里。
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Gridsource.ConnectionString = "Data Source=CATALOGSERVER;Initial Catalog=UACOrders;Persist Security Info=True;User ID=Catalog;Password=pass";
Gridsource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
Gridsource.SelectCommand = "GetOrderHistory";
Gridsource.DataSourceMode = SqlDataSourceMode.DataSet;
GridView1.DataSource = Gridsource;
ControlParameter cp = new ControlParameter();
cp.ControlID = DropDownList1.ClientID;
cp.Name = "Company";
cp.PropertyName = "SelectedValue";
cp.Type = System.TypeCode.String;
Gridsource.SelectParameters.Add(cp);
Gridsource.Page = this;
this.Controls.Add(Gridsource);
GridView1.DataBind();
updatepanel1.Update();
}
以下是asp.net中涉及的一小部分
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div id="contentarea">
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" ID="updatepanel1">
<ContentTemplate>
<div>
<asp:Label Text="Company: " runat="server"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="company" DataTextField="COMPANY" DataValueField="COMPANY"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
AutoPostBack="true" >
</asp:DropDownList>
<asp:SqlDataSource ID="company"
runat="server" ConnectionString="<%$ ConnectionStrings:UACOrdersConnectionString %>"
SelectCommand="SELECT [Customer] AS [COMPANY] FROM [Accounts] ORDER BY [Customer]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="Gridsource" runat="server"></asp:SqlDataSource>
奇怪的是,我可以在asp.net代码中正常地使用这种东西。但我似乎无法让它在这个特定网页所需的C#代码绑定中工作。所以,我需要再次找出cp.ControlID应该真正等于什么。
特定异常为"用户代码未处理InvalidOperationException。"在ControlParameter"Company"中找不到控件"DropDownList1"。"
VS将异常放在第39行,即
GridView1.DataBind();
如果你需要看到更多的代码,只需留下评论,我会发布更多。
根据您问题中更新的代码,我可以看出问题是DropDownList和SqlDataSource(此ControlParameter所属)不在同一个命名容器中。你有几个选择:
- 将SqlDataSource添加到标记中,而不是只在代码隐藏中创建,然后在页面生命周期后期添加它。这是最简单的选择
- 在Page生命周期的早期以编程方式将SqlDataSource添加到Page.Controls集合。就像Init事件中一样
像这样:
protected void Page_Init(object sender, EventArgs e)
{
Page.Controls.Add(Gridsource);
}
Alexander:为什么要给cp.ControlID="DropDownList1";,DropDownList1是DropDownList的对象,因此不能将此名称作为字符串传递,并且cp.Type=System.TypeCode.string是字符串类型,因此cp不能包含对象。
如果要将控件添加到cp中,则cp.ControlId=DropDownList1.ClientID