2011-04-18 52 views
1

我目前有两个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 '?'错误调用分开。有没有办法保持控件分离,还是必须在同一个内容标签内?

+0

是否有理由让他们在两个内容面板中? – TKTS 2011-04-18 21:24:08

+0

达老板这么说。 – Nathanus 2011-04-18 21:59:33

回答

0

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

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

由于Control参数的读取位于LeftContent标记中。

2

看起来有点不可靠,但是您可以在ResultPanel中放置HiddenControl,然后在页面加载时将其值设置为cbList1.SelectedValue

我知道你可以访问控制,无论它们在哪里,从代码后面,但显然你不能从内容本身的aspx端。

+0

这是在运行时从正确的控件获取值的唯一“傻瓜证明”方法。依靠或试图强制ASP.net为你做这一切,这将是很好的,并不总是工作,由于浏览器,DOM等 - 谁知道! – Fandango68 2017-09-13 03:01:07

0

几年后...我有一个gridview和一个控制参数相同的问题。在渲染页面的源代码中,您可以找到元素的确切“路径”。在我的情况下,它不仅是gv1$txtEmployeeName,而且还有gv1$ctl02$txtEmplyeeName

我猜,ctl02意味着EditItemTemplate,因为包括ctl02$解决了我的问题。

相关问题