是否可以将不同内容标记中的控件用作参数?

时间:2011-04-18 21:17:31

标签: asp.net html visual-studio-2010

我目前有两个Web控件,一个是CheckBoxList,另一个是GridView。 GridView的数据配置在其查询中有一个参数,该参数链接到CheckBoxList中的选定值。但是,当两个控件位于单独的内容标记中时,如下所示:

<asp:Content ID="ListPanel" runat="server" ContentPlaceHolderID="LeftContent">
    <h3>Pick Info Here</h3>
    <asp:CheckBoxList ID="cbList1" runat="server" 
        DataSourceID="TestDataSource" 
        DataTextField="St" DataValueField="St" RepeatColumns="2">
    </asp:CheckBoxList>
</asp:Content>

<asp:Content ID="ResultsPanel" runat="server" ContentPlaceHolderID="RightContent">
    <asp:GridView ID="gView1" runat="server" 
        AllowPaging="True" AllowSorting="True" 
        AutoGenerateColumns="False" DataSourceID="TestDS1">
        <Columns>
         ... 
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="TestDS1" runat="server" 
    ... 
    SelectCommand="SELECT ST FROM [Table] where ST = ?">
    <SelectParameters>
        <asp:ControlParameter ControlID="cbList1" Name="?" 
            PropertyName="SelectedValue" />
    </SelectParameters>
</asp:SqlDataSource>
</asp:Content>

当我将两个控件放在同一个<asp:Content>标记中时,它可以正常工作,但事情会因错误System.InvalidOperationException: Could not find control 'cbList1' in ControlParameter '?'而分开。有没有办法让控件分开,还是必须在同一个内容标签内?

3 个答案:

答案 0 :(得分:2)

看起来有点krufty但你可以在ResultPanel中放置一个HiddenControl,然后在页面加载时将它的值设置为cbList1.SelectedValue的值。

我知道你可以访问控件,不管它们所处的内容是什么,来自代码,但显然你不能在aspx一侧的内容本身内。

答案 1 :(得分:0)

显然,这可以通过在ContentPlaceHolderID前加上参数条目的ControlID来完成。就我而言,代码将是:

SelectParameters>
        <asp:ControlParameter ControlID="LeftContent:cbList1" Name="?" 
            PropertyName="SelectedValue" />
    </SelectParameters>  

因为参数读取的控件位于LeftContent标记中。

答案 2 :(得分:0)

几年后......我对gridview和控制参数有同样的问题。在呈现页面的源代码中,您可以找到确切的&#34;路径&#34;对元素。就我而言,它不仅是gv1$txtEmployeeName,还有gv1$ctl02$txtEmplyeeName

我猜,ctl02表示EditItemTemplate,因为包含ctl02$解决了我的问题。