【问题标题】:Reordering the position of usercontrols on a ASP.NET page重新排序用户控件在 ASP.NET 页面上的位置
【发布时间】:2012-07-03 16:11:06
【问题描述】:

我正在处理具有按特定布局排列的用户控件的页面。我正在修改该页面以支持根据用户的偏好重新排序位置。因此,从本质上讲,在加载时,我知道我需要将不同的用户控件放置在何处。

我可以想到两种方法:

  • 在客户端进行重新排序。这对用户来说并不理想 当他们看到重新排序发生时。
  • 在服务器端进行重新排序。这需要我做很多 重写以根据偏好动态加载用户控件。

还有其他方法可以完成我想做的事情吗?

【问题讨论】:

  • 这些控件的数据源是什么?我想如果它继承自 IEnumerable(实体框架,Linq -to SQL,甚至是普通的旧 List),您可以简单地更改 OrderBy 并重新绑定您的数据源,假设您的布局是在中继器或其他类似控件中完成的.
  • 它们是用户控件(ascx)。
  • 既然 Page.Controls 或 WhatContainerObject.Controls 对象是 IEnumerable,我们可以在那里订购吗?类似 Page.Controls.Cast().ToList();然后清除现有控件并使用上述语句执行 OrderBy 或类似的操作。
  • 这是一个有趣的想法。我需要根据顺序将用户控件放在 3 个不同的列中。我应该覆盖页面生命周期中的什么方法?
  • 我不是 100% 确定。如果它只是页面控件并且没有回发,它可能会在 Init 中工作...取决于您的用户控件是否需要视图状态、会话等。您将无法访问 PreInit 中的那些东西,但我总是喜欢越早越好。我认为控制绘制的顺序最终在 PreRender 或 Render 中确定,所以我会在此之前尝试。我认为在这一点上这是一种实验性的:)

标签: c# jquery asp.net webforms


【解决方案1】:

我建议在客户端重新排列,因为

  1. 您将保存回发。
  2. 您将使网站无缝衔接。

你怎么能这样

  1. 使用一个包含所有控件的主 div 和另一个包含加载图像的主 div。在使用 javascript 重新排列控件时切换可见性,或
  2. 您可以设置可见性:隐藏到您的身体,然后重新安排设置可见性:可见

这种方法的缺点是您必须使用绝对定位。

【讨论】:

  • 通过设置可见性在客户端执行此操作会给用户一种感觉,即加载页面需要更长的时间,因为他们必须等待客户端发生重新排序,然后我们才能使其可见。
  • 控件重新排列时显示加载图像。
  • 这里您也必须小心,因为这样在每次回发时,您也必须重新排列它们。
  • @AshwinSingh 我想我可以做到。我觉得页面看起来会很慢,因为重新排序会增加一些时间。
【解决方案2】:

有一个更简单的方法;渲染由渲染它们的父容器控制。可以创建一个容器,并完全控制其子项的呈现顺序(通过覆盖 RenderChildren 方法)。这不是最简单的选择,但它可以工作。步骤是:

  • 创建一个继承自 ContainerControl 的类
  • 覆盖 RenderChildren 方法
  • 在此方法中,它将呈现容器中的子项,覆盖它,不调用它的基类版本,并将实例获取到控件并呈现它们。这就是出现复杂情况的地方,因为您必须这样做。

【讨论】:

  • 我有办法在RenderChildren 中重新定位用户控件吗?这与使用 LoadControl 动态加载它们有何不同?
  • 动态加载也可以;你可以走那条路。但是,动态加载控件可能会很痛苦,因为您必须确保每次都以我相信的相同顺序将它们添加到树中。是的,你可以按照你想要的顺序渲染控件,所以你也可以完全控制它。
  • 我不想走动态加载路线。过去,这并不是一次愉快的经历。你能给我指出一个关于如何覆盖RenderChildren 来指定订单的资源吗?谢谢
  • 我找不到;但是,看看这个:aspfree.com/c/a/ASP.NET/… 并实现你的目标是改变孩子的渲染顺序;在提供的示例中,在 Render 中有一个 foreach;而不是使用 foreach,而是首先根据您拥有的任何标准对控件进行排序。
  • 您指向的链接是关于在自定义控件中覆盖RenderChildren。在我的情况下,我需要覆盖承载我的用户控件的页面中的方法。
猜你喜欢
  • 2013-01-05
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2010-10-23
相关资源
最近更新 更多