从ASCX中获取UserControl ControlID

时间:2013-01-31 14:06:36

标签: asp.net properties user-controls

我在网页上有一个数据源,下面是声明。它使用页面中的属性作为过滤器。

<asp:ObjectDataSource runat="server" ID="odsMyDataSource"
TypeName="Game" SelectMethod="GetBySomeID">
    <SelectParameters>
        <asp:ControlParameter Name="SomeID" ControlID="__Page" Type="Int32"
        PropertyName="MyID" />
    </SelectParameters>
</asp:ObjectDataSource>

转发器附加到此数据源。 现在,我想将此转发器及其数据源移动到用户控件(ASCX)中。 MyID属性也将从ASPX移动到ASCX。我在这里不知道的是在asp:ControlParameter中使用什么作为ControlID而不是__Page。

3 个答案:

答案 0 :(得分:2)

以下是对这种情况的极好处理:ControlParameter Supports "_Page" as ControlId, But Not "_UserControl"。有很多方法可以处理它;本文列出了一些。

答案 1 :(得分:1)

在页面上假设我们正在注册一个用户控件,我们只使用一次

<%@ Register Src="user_control.ascx" TagName="my_user_control" TagPrefix="uc1" %>

<uc1:my_user_control ID="my_user_control1" runat="server" />

然后在控件内我们可以使用ID my_user_control1

<asp:ControlParameter Name="SomeID" ControlID="my_user_control1" Type="Int32" PropertyName="MyID" />

答案 2 :(得分:0)

我找到的最简单的解决方案是在用户控件中创建一个新控件,然后隐藏它,如下所示:

<asp:Label runat="server" ID="lblStartDate" Text='<%= this.StartDate %>' style="display:none"></asp:Label>

<asp:SqlDataSource runat="server" ID="dsData" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" SelectCommand="GetDataStoredProcedure" SelectCommandType="StoredProcedure" >
<SelectParameters>
    <asp:ControlParameter ControlID="lblStartDate" Name="startDate" PropertyName="text" DbType="DateTime" />
</SelectParameters>
</asp:SqlDataSource>

并在用户控件的后面代码中:

 public DateTime StartDate
    {
        get { return ViewState["StartDate"] != null ? (DateTime)ViewState["StartDate"] : DateTime.Now; }
        set { ViewState["StartDate"] = value; }
    }