Можно ли использовать элемент управления в другом теге содержимого в качестве параметра? - PullRequest
1 голос
/ 19 апреля 2011

В настоящее время у меня есть два веб-элемента управления, один из которых - 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 ]

2 голосов
/ 19 апреля 2011

Кажется немного хитрым, но вы можете поместить HiddenControl в ResultPanel и затем установить его значение равным cbList1.SelectedValue при загрузке страницы.

Я знаю, что вы можете получить доступ к элементам управления независимо от содержимого, в котором они находятся, из кода, но, очевидно, вы не можете получить доступ к самому содержимому на стороне aspx.

0 голосов
/ 28 октября 2016

Несколько лет спустя ... У меня была та же проблема с сеткой и параметром управления. В исходном коде отображаемой страницы вы можете найти точный «путь» к элементу. В моем случае это был не только gv1$txtEmployeeName, но gv1$ctl02$txtEmplyeeName.

Полагаю, ctl02 означает EditItemTemplate, потому что включение ctl02$ решило мою проблему.

0 голосов
/ 19 апреля 2011

Очевидно, что это можно сделать, добавив префикс ContentPlaceHolderID к ControlID ввода параметра. В моем случае код будет:

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

, поскольку элемент управления, из которого считывается параметр, находится в теге LeftContent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...