2012-01-09 16 views
6

문제 : 나는 (단지 중요한 라인)과 같은 마크 업을
:ASP/C# 코드는 마크 업에서 제어에 도달 할 수

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" 
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 
<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

코드 숨김가 :

namespace MainSolution.CONTROLTEMPLATES.Kunde 
public partial class RTDeluxe : UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     linkUl.InnerHtml = string.Empty; 
    } 
} 

코드 숨김 내에서 ul에 액세스 할 수 있으며 컴파일 오류가 발생하지 않습니다. 그러나, 코드를 디버그 할 때 linkUl이 NULL이기 때문에 NullReferenceException이됩니다.

처음에는 네임 스페이스가 이유라고 생각했습니다. 그러나 여러 번 시도한 후에, 나는 그것이 맞다는 것을 확신합니다. FileLocation은 정확하고 내 iis의 controltemplates 폴더에는 해당 ascx 파일이있는 "Kunde"폴더가 있습니다.

동일한 구조의 다른 .ascx 파일이 있습니다. - 그들은 매력처럼 작동합니다.

질문 :
이러한 동작에 대한 네임 스페이스 이외의 다른 이유가 있습니까? 내가 볼 수있는 힌트가 있니?

편집 :

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl; 

Edit2가 : :이 RTDeluxe.ascx.designer.cs 파일이 존재
는, 생성 된 linkUl은 다음과 같습니다

, 나는 대답을 확인하려고합니다 모든 질문. 시간과 피드백에 감사드립니다!

  1. Visual Studio를 다시 시작한 후에도 문제가 지속됩니다.
  2. 또한 솔루션을 정리하고 새 솔루션을 배포했습니다. -> 문제가 지속됩니다.
  3. 컨트롤 계층을 디버그하고 검사 할 때 레이블이 없다는 것을 알 수 있습니다.
  4. ID를 변경하면 컴파일러는 코드 숨김 (오른쪽)에서 오류를 throw합니다. ID를 변경하면 이전과 똑같은 행동을하게됩니다.
  5. 또한 IIS와 전체 PC를 다시 시작합니다. -> 변경하지 마십시오.
  6. Name 속성을 linkul-definition -> No changes에 추가했습니다.
  7. FindControl을 사용하려고하면 NULL이 반환됩니다.
  8. 대상 프레임 워크는 .NET 3.5입니다.
  9. 링크는 리피터 또는 다른 컨트롤 안에 없습니다.
  10. web.config를 제거하거나 변경해도 솔루션으로 이어지지 않습니다.
  11. linkUl에 액세스하기 전에 EnsureChildControls을 추가하면 아무 것도 변경되지 않습니다.
  12. Page_PreRender로 코드를 이동해도 작동하지 않습니다.

여기에 나열되지 않은 제안 사항을 시도하고 곧 추가 할 예정입니다.

EDIT3 : 여기에
전체 태그 :

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> 
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 

<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

* Edit4 : 여기
좋아, 내가 알아 낸 몇 가지 추가 정보 : 나는 평범한를 추가하는 것처럼, 마크 업에 뭔가를 변경하는 경우 HTML 텍스트는 브라우저에서 인식하지 못하거나 브라우저에 표시되지 않습니다. 내가 이런 일을 할 때 :

표시됩니다. Visual Studio에서 모든 것이 잘된 것처럼 보입니다. 그러나 코드 숨김이 서버에서 이상한 마크 업에 대해 말합니다 ...

+0

linkUl에 대한 컴파일러에서 생성 한 정의를 표시 할 수 있습니까? –

+0

RTDeluxe.designer.cs 파일이 있습니까? – giammin

+0

@giammin 예, 질문을 수정했습니다. –

답변

1

: 코드 숨김 클래스 레벨에서 사용자 컨트롤의 파일에

을이 코드를 추가

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl(); 

을하고 protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;RTDeluxe.ascx.designer.cs에서 파일을 제거

Object가 방금 생성되지 않았다고 선언 되었기 때문일 수 있습니다. 희망이 있습니다 ..

0

컨트롤에 액세스하거나 코드를 다음 코드로 이동하기 전에 EnsureChildControls에 전화를 걸 았습니까 OnPreRender?

+0

제안을 주셔서 감사합니다 :) 나는 둘 다 시도, 불행히도 그것은 동작을 변경하지 않습니다 : ( –

+0

확실히 모든 EnsureChildControls가 있는지 확인합니다 CreateChildControls 메서드는 한 번만 호출됩니다. 페이지가 기본적으로 재정의하고 컨트롤에 빈 추상 메서드가 있습니다. . –

0

.aspx 파일에서 이전과 비슷한 문제가있었습니다. 그것은 내 web.config 파일에서 optimizeCompilations를 true로 설정함으로써 발생했습니다.

<system.web> 
    <compilation optimizeCompilations="true" /> 
</system.web> 

optimizeCompilations가 true로 설정된 경우 ASP.Net은 필요할 때 페이지를 다시 작성합니다. 때로는 혼란스러워지고 컴파일러가 캐치하지 않는 런타임 오류가 발생하는 페이지 재 작성이 필요한 변경을 수행 한 것을 알지 못합니다. 이 설정에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms366723.aspx을 참조하십시오.

일시적으로 optimizeCompilations를 false로 설정해야했던 문제를 해결하려면 내 웹 사이트를 다시 만들고 내 응용 프로그램 풀을 재활용 한 다음 다시 사실로 설정하십시오.

희망이 도움이됩니다.

0

때때로 이런 상황에서 Visual Studio가이 파일과 관련하여 상태가 좋지 않을 수 있습니다. 파일을 삭제하고 다시 만들면 문제가 해결되는 경우가 많습니다. 새로 생성 된 파일에 붙여 넣을 수 있도록 코드를 어딘가에 복사하십시오.

0

Visual Studio 게시 기능을 사용하여 배포하고 있습니까? 그렇다면 대상 서버에서 .ascx 파일을 삭제 해보십시오. Visual Studio에서 파일이 변경된 것을 인식하지 못하고 새 파일을 복사하지 않습니다. 이것은 당신에게 약간의 도움이 될 수