我正在尝试为我工作的网站清理旧版母版页。我遇到了一个问题,即我添加到标记中的用户控件没有将其 html 转储到页面上。
在 web.config 中,我添加了这一行来注册控件的路径:
<add tagPrefix="uc" namespace="Site.Controls.Modules" assembly="Site" />
在 SiteMain.Master 中,我添加了这样的控件:
...
<div id="HeaderTop">
<!-- dynamic insert of header top -->
<uc:MainHeaderTop ID="homepageHeader" Visible="false" runat="server" />
</div>
...
当我加载主页时,我将 homepageHeader.Visible 属性设置为 true。这段代码被击中并且运行良好。它看起来像这样:
protected void Page_Load(object sender, EventArgs e)
{
...
// _item is the current item for this page.
if (_item.TemplateName == "Homepage")
homepageHeader.Visible = true;
else
phNotHomepageHeader.Visible = true;
...
}
如果我在 MainHeaderTop 的代码隐藏中设置断点,我会很好地击中断点。但是 - 当页面加载时,我得到的只是包装标签的空 div,其中没有标记。它看起来像这样:
<div id="HeaderTop" class="homeHeader">
<!-- dynamic insert of header top -->
</div>
我是否缺少一些基本的东西才能让它工作?
编辑:在 SiteMain.Master OnPreRender 事件中,我放置了以下代码:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
string markup = string.Empty;
using (var sw = new System.IO.StringWriter())
{
using (var hw = new System.Web.UI.HtmlTextWriter(sw))
{
homepageHeader.RenderControl(hw);
markup = sw.ToString();
}
}
}
运行后,标记是一个空字符串。这是 MainHeaderTop 中的标记:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MainHeaderTop.ascx.cs"
Inherits="Site.Controls.Modules.MainHeaderTop" %>
<a href="http://www.site.com" style="width:100; height=200;">
<img src="~/media/F7E4164AF46A4B1791FCC60CE99763EC.ashx" alt="site" />
</a>
及其背后的代码:(添加的语句只是为了设置断点)
namespace Site.Controls.Modules
{
public partial class MainHeaderTop : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (true)
{
int i = 0;
}
}
}
}