2011-12-01 2 views
0

私はASP.NETを初めて使い、なぜMenuItemのテキストに現在のユーザー名を表示できないのかを理解するために戦っています。私はすべてのページに配置するメニューを保持制御を作成しました:(宣言的に)MenuItemにユーザー名を入れる方法

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MainMenu.ascx.cs" 
Inherits="Test1.Controls.MainMenu" %> 
<asp:Menu ID="NavigationMenu" CssClass="menu" runat="server" 
    EnableViewState="False" IncludeStyleBlock="False" Orientation="Horizontal" 
    MaximumDynamicDisplayLevels="4"> 
    <Items> 
     <asp:MenuItem Text="<%=HttpContext.Current.User.Identity.Name%>" />  
    </Items> 
</asp:Menu> 
<div> 
    User is: "<%=HttpContext.Current.User.Identity.Name%>" 
</div> 

終わりにDIVが<% = HttpContext.Current.User.Identity.Name%>が実際に現在のユーザー名を与えないことを証明することです(します)。ただし、MenuItem Text属性で使用すると空白になります。これを行う正しい方法は何ですか?


更新日:
これは有用なコメントなしで削除されています。実際の質問は本当に答えられていないので、私はこれを歓迎しています。私たちはこれをどう宣言していますか?なぜそれがDIVで動作するのか分かりませんが、メニューの上の4行ではありません。ページが異なるフェーズで処理されるため、これを宣言的に行うことは不可能かもしれません。

これらと同様のポストは、それは不可能それことを示唆している:
How do I make my ASP.NET server control take an embedded code block as a property value?
Why will <%= %> expressions as property values on a server-controls lead to a compile errors?

あなたは、私がこれをしたい理由を知りたい場合は、それは私が作った別の質問に関連する:
How to specify path relative to current Master Page File

+0

hum ...と思われるMenuItemはWebControlから継承しません。私は私の答えを削除しました –

答えて

0

あなたが使用しているものは、Steve Bが見つけたようにMenuItemでは機能しません。私はまだそれがなぜ働いているのですか。

最も簡単な方法は、コードの背後にあることです。

 string username = "Not Logged In"; 

     if (!string.IsNullOrEmpty(HttpContext.Current.User.Identity.Name)) 
     { 
      username = HttpContext.Current.User.Identity.Name; 
     } 

     NavigationMenu.Items.Add(new MenuItem(username)); 
+0

これは、実際に動作する最初のソリューションです、ありがとう。私は "NavigationMenu.Items [7] .Text = HttpContext.Current.User.Identity.Name"を使用して既存のメニュー項目にアクセスしました。 – Etherman

関連する問題