【发布时间】:2013-06-27 11:57:52
【问题描述】:
我有一个问题。我想在我的应用程序中设置母版页。由于我有太多的 aspx 页面,我不想去每个页面并在其中添加 asp:content 标记。我想要一些动态的方式来查看我的页面,复制它的 html/其他 asp 控件并将其添加到动态创建的内容模板中。 我知道如何动态创建内容模板。但不知道是否可以复制aspx页面的html并添加到内容模板中。
假设,在我的 aspx 页面的代码隐藏中,在 page_PreInit 上,我添加了以下代码。
base.AddContentTemplate("WebHeaderPH", new CompiledTemplateBuilder(new BuildTemplateMethod(this.getControl)));
getControl 是一种包含任何内容(html、文本或可能加载用户控件)的方法。
这样,我动态添加了一个内容模板。
现在我的 aspx 页面内容如下代码。
<span id="someid" runat="server">blah blah...</span>
现在我想要的是,通过它的 id 获取这个 span 标签,并将它包装在 asp:content 下。或者可能是在上面的getControl方法中。
但是把这个跨度放在页面上,会抛出以下错误,
内容控件必须是内容页或引用母版页的嵌套母版页中的顶级控件。
要么我必须把 asp:content 模板放在页面上。但如果我这样做,那么我不需要动态创建 contentTemplate 或将整个页面保持空白,因为我正在动态创建 contentTemplate。在这两种情况下,我都必须编辑我所有的 aspx 页面。
有没有办法获取页面的 html 并将其添加到 contentTemplate 而无需编辑 aspx 页面?
【问题讨论】:
-
我不这么认为,或者至少在没有编写脚本来编辑您的 aspx 文件的情况下不会。任何尝试使用服务器代码来做这件事都是一个坏主意。如果你有这么多的 aspx 页面并且不使用母版页,那么这是一个设计错误,你应该尝试使用另一个坏主意来修复它。
-
在你写这个问题的时间里,你可能已经手动转换了十几个文件。如果您有数百或数千个页面,请考虑编写自定义转换工具,但不要尝试在运行时转换页面。
-
好的。谢谢。我将手动修改我所有的 aspx 页面。以前它在 1.1 .net 框架上,因此没有母版页概念。我们现在已经在 4.0 上对其进行了转换。
标签: asp.net master-pages