2011-04-18 29 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$解決了我的問題。

相關問題