【问题标题】:How to put user name in MenuItem (declaratively)如何将用户名放入 MenuItem(以声明方式)
【发布时间】:2012-01-10 11:04:36
【问题描述】:

我是 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 是为了证明 确实给出了当前用户名(它确实给出了)。但是,在 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

【问题讨论】:

  • hum... 似乎 MenuItem 没有从 WebControl 继承。我删除了我的答案

标签: asp.net menuitem


【解决方案1】:

史蒂夫 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));

【讨论】:

  • 这是第一个真正有效的解决方案,谢谢。我使用“NavigationMenu.Items[7].Text=HttpContext.Current.User.Identity.Name”来访问现有的菜单项。
猜你喜欢
  • 2011-08-23
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2017-03-24
相关资源
最近更新 更多