有没有办法在许多不同的页面中重用一段ASP.NET代码(基于标记的代码,而不是代码隐藏)?例如,我有一个<div>
,其中包含一些内容,显示在我网站的5个不同页面中。我正在寻找一种技术,通过该技术,我可以将此<div>
保存在单独的网络内容文件中,可以说,可能会有一个不同的扩展程序,如MyDiv.ASPC
,然后可以在网页中的任何位置执行服务器端标记,如:
<asp:Import href="~/MyDiv.aspc" />
并且ASP.NET会在此标记出现的位置注入此文件的全部内容。
我想为此创建一个用户控件,但我不确定用户控件是否总是精确地注入其正文中写入的内容,或者有时候用户控件本身会生成不需要的标记。
还是有更好的方法吗?
修改
关于母版页,它们远离我正在寻找的东西。它们实际上适用于您网站的常见基本布局。我的想法与此完全相反。我的页面没有共同的布局;只是他们有一个共同的<div>
。 UserControl可以更加贴近它。
对于UCs来说,我担心的是他们产生的东西比他们体内的东西更多,而我所追求的只是简单的文字注入。从技术上讲,如果你明白我的意思,我正在寻找的基本上是一个预处理器步骤(在C ++中是一种#include的东西)而不是编译器步骤。
答案 0 :(得分:1)
您需要使用ASP.NET用户控件,因为这些是专门为您描述的问题解决的。有关详细信息,请参阅MS Documentation。
从他们的文件......
除了在ASP.NET网页中使用Web服务器控件之外, 您可以使用相同的方法创建自己的自定义,可重复使用的控件 用于创建ASP.NET网页的技术。这些控件是 称为用户控件。
用户控件是一种复合控件,其工作方式非常类似 ASP.NET网页 - 您可以添加现有的Web服务器控件和标记 到用户控件,并定义控件的属性和方法。 然后,您可以将它们嵌入到ASP.NET网页中,在那里它们充当 单元。
答案 1 :(得分:1)
空的userControl会做到这一点 - 没有。用户Control只是将其内容添加到页面或托管它的usercontrol。它没有增加任何额外的东西。
UserControls为您提供了一种很好的简单页面片段类型方法来重用内容。他们在一个项目中工作得很好。大多数人都将它们用于此。
如果您想在项目中创建更多可重用的东西,可以编写服务器控件。它涉及更多,但更可重用。谷歌应该能够找到很多关于如何做到这一点的教程。
答案 2 :(得分:0)
进行短暂的测试。只要您没有在其中放置任何Runat =“Server”标签,用户控件就不会输入额外的标签,所以这确实是我猜的解决方案。
您还可以从缓存对象中读取输出文件的输出。
所以
<%= Static.ContentXyz %>
意味着:
public static class Static
{
public static string ContentXyz
{
get
{
string s;
if (!this.cacheDictionary.TryGetValue("ContentXyz", out s))
{
s = File.ReadAllText(Server.MapPath("ContentXyz.html"));
this.cacheDictionary("ContentXyz", s);
}
return s;
}
}
}