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> 

ДИВ в конце концов доказать, что <% = HttpContext.Current.User.Identity.Name%> действительно дает имя текущего пользователя (оно делает). Тем не менее, он просто возвращает пустое значение при использовании в атрибуте TextItem Text. Каков правильный способ сделать это?


UPDATE:
Я вижу, что это было опущено без какого-либо полезного комментария. Я исправил это, поскольку на реальный вопрос на самом деле не ответил: как это сделать декларативно? Трудно понять, почему он работает в 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

вещь, которую вы используете, не работает для MenuItem, как выяснил Стив B. Я все еще выясняю, почему это так.

Самый простой способ - сделать это в коде позади.

 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

Смежные вопросы