2011-12-01 60 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屬性中使用時僅返回空白。什麼是正確的方法來做到這一點?


更新:
我看到這是downvoted沒有任何有用的評論。我對此表示贊同,因爲真正的問題還沒有得到真正的答覆:我們如何以聲明的方式來做到這一點?很難弄清楚爲什麼它在DIV中工作,但不是菜單上方的四行。看起來,由於頁面處理的階段不同,可能無法以聲明方式執行此操作?

這些類似的帖子表明它不可能:
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

嗡嗡...似乎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