【发布时间】:2011-07-26 12:22:18
【问题描述】:
我有三个用户控件:usercontrolA、usercontrolB 和 usercontrolC,它们都共享相同的代码隐藏,每个控件都有:
<%@ Control Language="c#" AutoEventWireup="True" Codebehind="usercontrolA.ascx.cs" Inherits="usercontrolA" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> 在 ascx 的顶部。
在代码隐藏文件中,我有一个名为 ShowAll 的公共属性。
我知道我可以在将用户控件放在页面上时设置此属性,例如
<uc1:usercontrolB ID="usercontrolB1" runat="server" ShowAll="true" />
但是我希望在 usercontrolB 上 ShowAll 始终设置为 true,因此不必在每次将其放置在页面上时都设置它。
我知道我可以在 usercontrolB 中添加一个脚本标签来设置 Page_Load 中的 ShowAll:
<script runat="server">
protected void Page_Load(object sender, System.EventArgs e)
{
ShowAll = true;
}
</script>
但想保留我在代码隐藏中已有的Page_Load 实现。 还有其他方法可以自动为 usercontrolB 设置此属性吗?
编辑:如果可能的话,我希望能够在 ascx 中而不是在后面的代码中设置它,以便以后其他人可以添加 usercontrolD 并设置 @987654331对于usercontrolD 的所有实例,@ 为 true,而无需让我修改和重新编译代码隐藏。
【问题讨论】:
-
为什么要共享代码隐藏?
-
@Arief,这是面向对象编程的主要原则之一。
-
@Arief 避免为本质上相同的控件复制大量代码,但 html 标记的变化
-
我的意思是如果你有不同的行为,为什么你首先要共享相同的代码?不能用继承吗?抄送@Kon
-
您遇到的问题类型应该引起注意。也许是时候备份和重构您的设计了。看起来这确实是继承而不是直接代码共享的候选。
标签: c# asp.net user-controls