1

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

<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。

4

3 回答 3

2

这是对这种情况的一个很好的处理: ControlParameter 支持“_ Page”作为 ControlId,但不支持“ _UserControl”。有很多方法可以处理它;本文列出了一些。

于 2013-01-31T14:46:34.833 回答
1

在 Page 假设我们正在注册一个用户控件并且我们只使用它一次

<%@ 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" />
于 2013-04-10T18:12:11.357 回答
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; }
    }
于 2015-02-23T15:40:24.700 回答