我们有两个网站,只有不同的设计(不同的图像,样式,布局......等),但文件和cs代码的网络结构是相同的,所以我们想简化其维护......
实际结构如下:
DefaultA.aspx
DefaultA.aspx.cs
DefaultB.aspx
DefaultB.aspx.cs
LoginA.aspx
LoginA.aspx.cs
LoginB.aspx
LoginB.aspx.cs
一个想法是在运行时根据原始网站改变设计差异,但我们不喜欢这个,因为性能,设计中的抽象和网址混淆......
另一个是共享cs(aspx继承和使用相同的cs)文件,但我们从未在任何网站上完成或看过它,所以我们想知道它是否是一个好的方法...
你怎么看?在性能与开发方面相比,还有其他更好的方法吗?答案 0 :(得分:4)
也许我对您的问题感到困惑,但如果您有两个真正完全相同的网站,除了图片/样式/布局 - 为什么不删除其中一个网站而只是使用一些CSS魔术显示两个不同的网站,具体取决于用户访问的地址。
答案 1 :(得分:2)
如果它只是布局改变而不是功能我会建议去不同的主题。根据某些逻辑,例如角色或“个人资料”中的某些内容,您可以选择加入页面的OnPreInit event以在代码中设置主题。
除此之外,我还建议你让每个代码隐藏页继承自继承自Page类的自定义类。在该自定义类中编写OnPreInit代码,以设置正确的主题,这样您只需编写一次。您的所有其他页面都继承自该类,并且受益于动态主题设置。顺便说一句,您也可以使用相同的技术动态设置母版页。
Grz,Kris。
答案 2 :(得分:1)
我有一个类似的场景,我创建了.net控件,必须在不同的站点中有替代标记和外观。仅仅应用不同的CSS规则和主题是不够的,因为这些控件的标记可能会根据设计文档等而发生巨大变化。
我发现最好的方法是识别公共控件或页面,然后将其代码迁移到存储在单独程序集中的类中。这实际上非常简单,您只需将类后面的代码重新创建为程序集中的新类,并确保继承页面/控件根据需要引用assembly.type。完成后,您现有的网站将像以前一样运行,但您也将从UI层中分离出您的控制逻辑。
现在你有一个可以放入多个项目的程序集,所有你需要做的就是添加一个新的控件/页面,它继承了你的程序集/类型,而不是在文件后面有多个代码,它们在不同的网站上做同样的事情。重要的是要确保您的页面中引用的任何子控件都存在于您的标记中,以便ASP .Net在页面生命周期中将控件连接到实例后面的代码。
答案 3 :(得分:0)
另一个是分享cs(两者都是 aspx继承并使用相同的cs) 文件,但我们从来没有做过或看过它 在我们之前在任何网站上完成 想知道它是否是一个好方法......
最后我们采用了这条路线,直到现在我们还没有遇到任何问题,它很容易保留,如果你在A站点添加新控件,编译器会警告你将它们添加到B站点......
答案 4 :(得分:0)
您已经接受了这个作为您自己的答案,但我想提供您之前处理类似问题的方法,将两个“相同”的网站转换为单独的项目来处理这两个问题。我有两个独立的网域,托管几乎相同的应用程序,格式化为不同公司的独立品牌。我需要一个具有通用代码的单一解决方案,该解决方案能够根据所服务的域独立提供服务,运行和记录。
首先,我们创建了基本控件(基页,基本用户控件),它们包含了我们经常需要的所有业务对象数据(会话,视图状态,基本属性,我们知道我们普遍需要的任何东西)。在我们的类库的基页中,我们创建了一个属性来标识正在提供的站点(可扩展,因为这是枚举)。
在实际结构中,我们为每个需要自己品牌的公司创建了一个文件夹,在那里我们创建了实际的aspx页面,这些页面分配了控制样式和品牌的母版页。在母版页中,我们包含了用户控件。我们所有的应用程序控件都是使用样式化用户控件构建的。这样,实际应用程序的功能保存在同一个地方,但可以为多个品牌调用它。最重要的是,根据品牌的不同,应用程序存在细微差别。这些例外被编码到用户控件中,以便可以轻松识别它们以供将来维护,并且在某些情况下,用户控件仅在一个品牌中用于特定目的。
这种细分使我们能够使站点地图更加清晰,为同一个应用程序提供多个接口,而无需重写应用程序,并且通过基本控件/页面,我们可以使新的团队。一旦他们熟悉基类和体系结构布局,他们就可以在分配它们的站点中找到任何内容。