不想往每个ASPX页面手动添加META,也不想在每个页面的PAGE_LOAD中添加处理方法,偶目前找了两个方案.
方案一:可以自己手动添加一个类PageBase,让该类继承System.Web.UI.Page.在PageBase中重写OnLoad方法
代码如下:
Code
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
HtmlMeta meta = new HtmlMeta();
meta.Name = "keywords";
meta.Content = "关健字";
HtmlHead head = (HtmlHead)Page.Header;
head.Controls.Add(meta);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
HtmlMeta meta = new HtmlMeta();
meta.Name = "keywords";
meta.Content = "关健字";
HtmlHead head = (HtmlHead)Page.Header;
head.Controls.Add(meta);
}
最后,在新建的每个一ASPX页面的代码文件中的类都继承PageBase类.如果每次去修改默认的继承类嫌麻烦,就用方案二了.
方案二:由于前面有用过ASP.NET 2.0自带的URL重写特性.然后添加一个适配类动态地改变FORM的ACTION属性值,在URL Rewrite后保持PostBack地址不变.于是也想添加一个对HtmlHead的适配类来改变HtmlHead里面的生成行为.
我的具体做法如下:(ASP.NET的具体编译原理与过程不是很熟,有可能无法解释其中的道理)
1.添加一个浏览器文件Head.browser,其配置的内容如下:
Code
<!--
可在 <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers 中找到现有的浏览器定义
-->
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlHead"
adapterType="HeadRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>
<!--
可在 <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers 中找到现有的浏览器定义
-->
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlHead"
adapterType="HeadRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>
2.添加一个HeadRewriterControlAdapter类,该类继承于System.Web.UI.Adapters.ControlAdapter;
3.在HeadRewriterControlAdapter类中重写OnLoad方法,即可达到目的,代码同方法一中重写OnLoad方法的代码一致.
今天是七夕,愿天下有情人终成眷属。