我是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属性中使用时只返回空白。这样做的正确方法是什么?
<小时/> 的更新:
这些类似的帖子表明它是不可能的:
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 :(得分: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));