我可能很疯狂,但是母版页吓到我了,因为我担心一旦我被锁定使用母版页,我会遇到一种情况,我只想继承母版页的90%的可视内容,迫使我打破继承,因此必须重现主人的内容并将其带入孩子。
我觉得这是任何“继承”的问题,因为你必须要小心,但似乎至少你可以覆盖常规类中的方法。
我可能在这里不太一致,但用户控件似乎给你更多的灵活性。唯一的缺点是你必须将它们拖到webform上。对此,我说了很多。
将我的应用程序从使用usercontrols转换为母版页让我害怕,我担心我的Javascript会破坏。
评论
答案 0 :(得分:13)
不要害怕。
您可以根据需要创建任意数量的占位符,使您的母版页非常精细。这些占位符还可以包含默认内容和控件。
因此,在您想要默认标记的90%页面中,您可以省略覆盖内容。
或者,在10%的情况下,如果您想要不同的东西,可以提供覆盖标记
示例:
<%@ Master Language="C#" %>
<html>
<body>
<asp:ContentPlaceholder id="Headline" runat="Server">
My Default Headline
</asp:ContentPlaceholder>
<asp:ContentPlaceholder id="Main" runat="Server" />
</body>
</html>
在您的主页上,您可以拥有如下页面:
<%@ Page MasterPageFile="..." %>
<asp:Content ContentPlaceHolderID="Headline" runat="Server">
My homepage headline
</asp:Content>
<asp:Content contentplaceholderid="Main" runat="server">
My homepage main content
</asp:Content>
在所有其他网页上,通过省略标题标记来利用默认的“标题”,如下所示:
<%@ Page MasterPageFile="..." %>
<asp:Content contentplaceholderid="Main" runat="server">
My page main content
</asp:Content>
答案 1 :(得分:8)
我不会考虑不使用母版页。如果你想在大多数页面上分享最多的铬,内部铬合金在筒仓中共享等,你总是可以嵌套母版页。
答案 2 :(得分:1)
就像你提到的那样,继承问题可以从任何地方出现。不要过早地过度工程。
根据您描述的masterpages问题,您可以交换/输出不同的css文件,并使用选择器隐藏/更改从母版页生成的html部分。
答案 3 :(得分:1)
一旦你习惯了它们,你就会按照预期开始使用它们。由足够的页面共享以保证共同来源的那些信息(参考CSS,常见的js,页面放置问题等)将会去那里,之后你会很高兴他们在那里。
当你构建一个与之断开的页面时,你可能会发现自己正在对main.master进行一些调整(以不同方式抽象出来),但是你将能够快速进行调整并继续前进。
如果它只是打破规则的一次性页面,那么您可以简单地告诉该页面继承不同的主页。
在开始依赖它之前,制作一个测试网站并稍微使用该概念。
答案 4 :(得分:-2)
母版页背后的想法很好(如果不是微不足道的话),但是因为它们的实现而没用。
母版页不会调用页面(内容),但相反。那么,它的问题是什么?很简单,你不能调用不同的页面,而是单个页面。因此,您正在编写代码并将所有代码放在同一页面中。这完全是胡说八道。主页面允许多个内容块,但都指向同一页面(因此,使代码混乱)。
连接母版页代码和来电者页面并非易事,例如,它们共享相同的“表单”标记,但您必须将表单标记放在页面中,您只能使用表单标记一次。 : -
变量/值不是直接共享的,你可以但它需要一些“hack”(例如在master中调用一个函数)
您必须在加载周期中注意(在页面加载之前)。
母版页很不错,否则在每个页面中简单地“复制和粘贴”或使用自定义控件会更好,因为母版页增加了新的复杂程度。
请记住,Master Page的目标是节省时间,如果在此任务中失败,则无用。
我的2美分。