如何将用户名放在MenuItem中(以声明方式)

时间:2011-12-01 09:28:07

标签: asp.net menuitem

我是ASP.NET新手,我正在努力理解为什么我无法在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是为了证明&lt;%= HttpContext.Current.User.Identity.Name%&gt;确实给出了当前的用户名(确实如此)。但是,它在MenuItem Text属性中使用时只返回空白。这样做的正确方法是什么?

<小时/> 的更新:
我看到这是没有任何有用的评论。我已经对此提出了修正,因为真正的问题还没有真正回答:我们如何以声明的方式做到这一点?很难弄清楚它在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

1 个答案:

答案 0 :(得分: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));