2010-02-02 2 views
2

오케이. ASP.NET과 MasterPage 개념에 익숙하지 않아서 알아낼 수없는 오류가 있습니다. 나는 Nullref 예외를 얻을Nullref Exc. 인텔리 센스가 감지 한 라벨에요?

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Init(object sender, EventArgs e) 
    { 

    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (User.IsInRole("Authenticated")) 
     { 


      MemberCreditLabel.Text = "hello "; 
     } 

    } 
} 

:

<asp:Content ID="ContentLoginContent" ContentPlaceHolderID="LoginContentPlaceHolder" runat="server"> 
<div id="ContentLoginDiv"> 
    You've got <asp:Label ID="MemberCreditLabel" runat="server" Text="0"></asp:Label> credits. 

</div> 

이것은 관련 제하여 default.aspx.cs의 일부입니다

내 default.aspx에의 한 부분이다 MemberCreditLabel에. IntelliSense로 감지됩니다. 나는 문제가 로그인 할 때의 ContentPlaceHolder "ContentLoginContent는"만 표시 일 수 있었다 생각이 내 MasterPage의 일부입니다. 내가 원하는 무엇

<asp:LoginView ID="MemberLoginView" runat="server"> 
      <AnonymousTemplate> 
       <asp:Login ID="LogInBox" runat="server" Height="137px" style="margin-left: 0px" 
        Width="16px"> 
       </asp:Login>  
      </AnonymousTemplate> 
      <LoggedInTemplate> 
       Welcome <asp:LoginName ID="MemberLoginName" runat="server" /> ! 
       <asp:LoginStatus ID="MemberLoginStatus" runat="server" /> 
       <asp:ContentPlaceHolder ID="LoginContentPlaceHolder" runat="server"> 
       //Is this the problem? 
       </asp:ContentPlaceHolder> 
      </LoggedInTemplate> 
      </asp:LoginView> 

는 데이터베이스에 저장된 신용 양을 보여주는 것입니다. 원하는 데이터를 가져 오는 기능이 작동합니다. 나는 현재 로그인 한 사용자의 사용자 이름을 사용하고 사용자와 관련된 크레딧 금액을 가져오고 싶습니다. 그러나 라벨과 관련된이 이상한 오류는 나를 완전히 멈추게합니다. 아마 아직 우연히 발견하지 못한 MasterPages의 개념과 관련이 있습니다. 어떤 아이디어?

+0

글쎄, 이제는 LoginView 블록에서 ContentPlaceHolder를 제거 했으므로 "의도 한대로 작동합니다"라는 레이블이 추가되었습니다. 어떻게 내가 같은 결과에 도달하겠습니까? 로그인했을 때만 표시되는 컨텐츠 영역을 가지려면? – Phil

답변

1

은 분명히이 by design입니다 :

이것은 의도적으로 설계된 동작입니다. 콘텐츠 컨트롤은 템플릿 안에있는 contentplaceholder 컨트롤의 내용을 대체합니다. 따라서 실제로는 텍스트 상자가 템플릿에서 시작되므로 FindControl을 사용하여 조회해야합니다. 직접 액세스는 사용할 수 없습니다.

감사합니다,

WebPlatform 및 도구 팀.

그러나, 재귀의 FindControl을 사용하여, 나는 실제로 LoggedInTemplate 내부 통제의 보류를 얻을 수 없습니다 - 실제로 페이지의 마크 업, ReSharper에서 그것이 상징 "LoginContentPlaceHolder를 해결할 수 없다고 불평 "- 즉, 마스터 페이지에서 내용 자리 표시자를 올바르게 찾을 수 없습니다.

인증 된 모든 페이지에 크레딧을 표시 할 수있는 방법이 있습니까?

또는 CreditView가 포함 된 LoggedInTemplate만으로 LoginView를 래핑하여 usercontrol에 삽입하고 콘텐츠 자리 표시 자 내에 드롭 할 수 있습니다.

+0

내 솔루션은 사용자가 로그인하지 않았을 때 레이블을 비워 두는 것이 었습니다. 로그인하면 Page_Load 아래의 레이블을 채 웁니다. 이것이 의도 된 방법인지 모른다. 이것을 위해 최선의 관행이 있어야한다. – Phil

관련 문제