ASPX 页面中带有参数的数据源可在用户控件中移动

发布于 2024-09-17 01:31:41 字数 563 浏览 3 评论 0原文

我有一个页面,其中包含一些数据源。我正在对页面本身进行重新设计,并希望将页面的某些部分拆分为多个用户控件。

在我的代码中,我有一个具有以下参数的 ObjectDataSource 对象

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
   TypeName="DataSetTableAdapters.PhotosTableAdapter"
   SelectMethod="GetPhotosForAlbum">
   <SelectParameters>
       <asp:ControlParameter Name="albumID" ControlID="txtAlbumID" Type="Int32"/>
   </SelectParameters>
</asp:ObjectDataSource>

这段代码自动将隐藏字段“txtAlbumId”绑定到数据源。在我的修订中,该数据源应移至用户控件。

处理这种情况的最佳方法是什么?

问候, 洛伦佐

I have a page with some datasources in it. I am doing reenginering of the page itself and would like to split some parts of the page in several user controls.

In my code I have an ObjectDataSource object with the following params

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
   TypeName="DataSetTableAdapters.PhotosTableAdapter"
   SelectMethod="GetPhotosForAlbum">
   <SelectParameters>
       <asp:ControlParameter Name="albumID" ControlID="txtAlbumID" Type="Int32"/>
   </SelectParameters>
</asp:ObjectDataSource>

This piece of code automatically bind the hidden field "txtAlbumId" to the datasource. In my revision this datasource should be moved to a user control.

What is the best way to handle a scenario like this?

Regards,
Lorenzo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薄荷港 2024-09-24 01:31:42

您可以在用户控件上创建一个属性,以公开隐藏字段上的属性,如下所示:

public int AlbumID
{
    get { return Convert.ToInt32(txtAlbumID.Value); }
    set { txtAlbumID.Value = value.ToString(); }
}

然后您应该能够将对象数据源连接到用户控件:

<asp:ControlParameter Name="albumID" ControlID="myUserControl" PropertyName="AlbumID" Type="Int32"/>

编辑:

有几种方法反之亦然(即用户控件中的数据源)。一种方法是可行的,但我发现会让设计者感到困惑,即将用户控件中的参数集合公开为公共属性:

public ParameterCollection SelectParameters
{
    get { return ObjectDataSource1.SelectParameters; }
}

这样做允许您从页面填充参数集合,如下所示:

<my:UserControl runat="server" ID="myUserControl">
    <SelectParameters>
        <%-- ... --%>
    </SelectParameters>
</my:UserControl>

如果您使用设计器,您的控件将始终显示错误,但它可以工作。 (请注意,我已将这种方法与查询字符串和会话参数一起使用。看看它是否能够在控制参数中幸存下来会很有趣。)

不过,我认为最简单的方法是交换 ControlParameter< /code> 为普通的旧参数,并通过属性公开默认值。

public int AlbumID
{
    get { return Convert.ToInt32(ObjectDataSource1.Parameters[0].DefaultValue); }
    set { ObjectDataSource1.Parameters[0].DefaultValue = value.ToString(); }
}

然后,您可以将数据绑定或直接分配给控件的AlbumID 属性,并期望将值转发给参数。

You can create a property on the user control to expose the property on the hidden field like so:

public int AlbumID
{
    get { return Convert.ToInt32(txtAlbumID.Value); }
    set { txtAlbumID.Value = value.ToString(); }
}

You should then be able to wire the object data source to the user control:

<asp:ControlParameter Name="albumID" ControlID="myUserControl" PropertyName="AlbumID" Type="Int32"/>

Edit:

There are a few ways to go the other way around (i.e., data source in the user control). One approach is viable, but I find makes for some designer confusion, is to expose the parameter collection from the user control as a public property:

public ParameterCollection SelectParameters
{
    get { return ObjectDataSource1.SelectParameters; }
}

Doing so allows you to fill the parameter collection from the page like so:

<my:UserControl runat="server" ID="myUserControl">
    <SelectParameters>
        <%-- ... --%>
    </SelectParameters>
</my:UserControl>

If you use a designer, your control will always display an error, but it works. (Note, that I've used this approach with query string and session parameters. It would be interesting to see if it will survive control parameters.)

I think, though, that the easiest method is to swap out your ControlParameter for a plain old Parameter, and expose the default value through a property.

public int AlbumID
{
    get { return Convert.ToInt32(ObjectDataSource1.Parameters[0].DefaultValue); }
    set { ObjectDataSource1.Parameters[0].DefaultValue = value.ToString(); }
}

You can then data bind or assign directly to the AlbumID property of the control, and expect the value to be forwarded to the parameter.

趁微风不噪 2024-09-24 01:31:42

另一种选择是以编程方式进行。

var cp = ObjectDataSource1.SelectParameters["albumID"] as ControlParameter;

cp.ControlID = //Any one of a dozen ways to get this value into the control

Another option would be to just do it programatically.

var cp = ObjectDataSource1.SelectParameters["albumID"] as ControlParameter;

cp.ControlID = //Any one of a dozen ways to get this value into the control
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文