【发布时间】:2011-07-27 10:57:45
【问题描述】:
使用用户控件的最佳做法是什么?我的用户控件通常是在服务器上提交数据的表单,它们可以在页面中重用。
css 样式应该放在用户控件的什么地方?或在 aspx 页面中,这些样式应该在页面或外部 css 中?
类似的成功或失败消息通常是页面的一部分。但是在使用用户控件时,用户控件应该告诉页面关于结果或消息标签应该在控件内吗?
在使用用户控件时还有什么需要考虑的吗?
【问题讨论】:
使用用户控件的最佳做法是什么?我的用户控件通常是在服务器上提交数据的表单,它们可以在页面中重用。
css 样式应该放在用户控件的什么地方?或在 aspx 页面中,这些样式应该在页面或外部 css 中?
类似的成功或失败消息通常是页面的一部分。但是在使用用户控件时,用户控件应该告诉页面关于结果或消息标签应该在控件内吗?
在使用用户控件时还有什么需要考虑的吗?
【问题讨论】:
首先,使用外部 css 文件进行样式设置通常被认为是最佳做法。通过这种方式,您可以在一个中心位置定义样式,因此它们可以在多个页面中重复使用,并且您可以修改样式而无需修改所有页面/控件。但是,如果您只有一个页面,您不妨将 CSS 代码放在页眉中。
其次,如果您指的是表单验证,我会在您的用户控件中实现它。这样,如果您要大量重复使用控件,则无需每次都重写验证。
如果您想将信息从页面传递到用户控件,您只需将适当的属性或方法公开或设为内部,即可将它们公开给页面。然而,从用户控件传递信息有点困难。一种方法是将页面中的委托传递给控件,或者在控件内部引发事件并让页面监听。无论哪种方式,让控件知道任何实现详细信息页面都被认为是不好的做法,因为这会阻止任何重复使用。
因此,如果您想在主页上显示来自您的控件的错误消息,我会将此消息作为属性或通过页面可以侦听的事件公开。
【讨论】:
页面是控制器,它正在进行保存/编辑,因此它也应该有显示结果的标签。
Page 和 UserControls 应该通过以下方式进行通信
这里有更多信息:http://www.codeproject.com/KB/user-controls/Page_UserControl.aspx#3
【讨论】:
类似的成功或失败消息通常是页面的一部分
确实,在所有相关页面的同一位置出现错误消息是很常见的,可能是通过将其放在母版页上。
一种常见的方法是为您的 UserControls 和 Pages 实现一个基类,该基类为常见的东西(例如错误消息的显示)实现管道。类似于以下粗略骨架:
public class MyUserControlBase : UserControl
{
...
protected MyPageBase MyPageBase
{
get
{
PageBase pageBase = Page as PageBase;
if (pageBase == null) throw new InvalidOperationException(
"This UC must be on a Page derived from MyPageBase");
return pageBase;
}
}
...
}
public class MyPageBase : Page
{
...
public void ShowError(string errorMessage)
{
MyMaster master = this.Master as MyMaster;
if (master != null) master.ShowError(errorMessage);
}
...
}
【讨论】: