我正在嘗試爲我工作的網站清理舊版母版頁。我遇到了一個問題,即我添加到標記中的用戶控件沒有將其html轉儲到頁面上。用戶控件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;
}
}
}
}
是否當它不會在標記設置爲可見假工作? Page_load是否在控件中? – lgaud
是的,在SiteMain.Master Page_Load中我做'homepageHeader.Visible = true;',並且homepageHeader是有效的並且是對MainHeaderTop控件的引用。 –
你在哪裏將可見性設置爲true?請提供一些代碼。 – CalC