2012-10-26 3 views
0

나는 작업중인 사이트의 레거시 마스터 페이지를 정리하려고합니다. 내가 마크 업에 추가 한 사용자 컨트롤이 html이 페이지에 덤핑되어 있지 않은 문제가 있습니다. 의 Web.config에서 사용자 컨트롤 html이 페이지에 포함되지 않음

, 전 대조군에 대한 경로를 등록하기 위해 줄을 추가 :

... 
    <div id="HeaderTop"> 
     <!-- dynamic insert of header top --> 
     <uc:MainHeaderTop ID="homepageHeader" Visible="false" runat="server" /> 
    </div> 
... 

:

<add tagPrefix="uc" namespace="Site.Controls.Modules" assembly="Site" /> 

SiteMain.Master하여,이 같은 제어를 추가 기본 페이지를로드하고 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> 

나는이 작업을 수행하기 위해 기본적인 작업을하지 못하고 있습니까? 이 마크 업이 빈 문자열 실행 된 후

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(); 
     } 
    } 
} 

:

편집

다음 SiteMain.Master OnPreRender 이벤트 , 나는 다음과 같은 코드를 배치했다. 여기 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; 
      } 
     } 
    } 
} 
+0

그것이 작동합니까 만드는 희망? Page_load가 컨트롤에서 작동합니까? – lgaud

+0

예, SiteMain.Master Page_Load에서'homepageHeader.Visible = true;'를하고 homepageHeader가 유효하고 MainHeaderTop 컨트롤에 대한 참조입니다. –

+0

어디에서 가시성을 true로 설정합니까? 몇 가지 코드를 입력하십시오. – CalC

답변

1

, 당신은 특별히 당신의 Web.config 설정에 .ascx 파일을 참조 할 필요가있다.

ASP.NET은 호출 할 클래스의 이름을 기반으로 파일의 위치를 ​​"알 수"않기 때문에 컨트롤의 마크 업을 정확히 알아야합니다.

네임 스페이스/어셈블리 만 참조하면 (현재있는 것처럼) 클래스의 인스턴스 만로드하는 것처럼 보입니다. 문제가되는 클래스의 클래스가 .ascx 마크 업에있는 서버 컨트롤을 사용하여 아무 것도하지 않으므로이 방법이 효과적입니다.

서버 컨트롤이 있고 그걸로 뭔가를 시도한 경우이 상황에서 컨트롤이 존재하지 않기 때문에 예외가 발생했을 것입니다.

그럼 내가해야 할 일은 다음과 같습니다. 웹에 등록하려는 각 컨트롤에 대해 다음을 배치하십시오.설정 (분명히 tagName 및 올바른 src 설정) ...

<add tagPrefix="uc" tagName="MainTopHeader" src="~/CorrectPath/MainTopHeader.ascx"/> 

당신은 200 개 이상의 사용자 컨트롤이 말하는 것처럼, 당신은 아마 그냥 일반적인 사람을 등록하고자 한 다음 전원을 필요로하는 개별 페이지에서, 일반 참조를 사용 ...

<%@ Register TagPrefix="uc" TagName="AnotherCtrl" Src="~/CorrectPath/AnotherCtrl.ascx" %> 

나는이이 마크 업에 보이는 false로 설정되어 있지 때 의미

+0

실제로 이것은 완벽한 의미로 해석됩니다. 이제 이걸 해 볼까요? –

+0

이것은 정확하게 문제가되었습니다 - 감사합니다. –

+0

위대한, 다행스럽게도, @ 마이크. 프로젝트의 나머지 부분과 함께 행운을 빈다 :() 당신은 200 개의 모든 참조를 가질 필요가 없길 희망한다. – freefaller

0

대체 방법 사용 -

style="display:none;" 기본

으로
<uc:MainHeaderTop ID="homepageHeader" Visible="true" style="display:none;" 
runat="server" /> 

jQuery를 사용하여: 난 그냥 수행 한 테스트에서

$(function(){ 
$("#<%=homepageHeader.ClientID %>").css("display", ""); 
}); 
+0

이 컨트롤에 대한 html이 페이지에 전혀 덤프되지 않는다는 것을 고려하면 이는별로 도움이되지 않습니다. 컨트롤에 대한 Page_Load가 발생하더라도 마찬가지입니다. –

관련 문제