HTTPContext.Current.User.Identity.Name无法在控件中运行?

时间:2012-03-20 12:28:02

标签: asp.net httpcontext windows-identity

我有一个标签,我想将此标签的文字设置为

HTTPContext.Current.User.Identity.Name

所以我写了

Text = '<%=HTTPContext.Current.User.Identity.Name %>'

但它不起作用,但是当我在标签之外写这个例子时:

<h2>
<%=HTTPContext.Current.User.Identity.Name %>
</h2>

它有效。

3 个答案:

答案 0 :(得分:4)

<asp:Label ID="lbUserName" 
           runat="server"
           Text='<%# HttpContext.Current.User.Identity.Name %>'
            />
在Page_Load

if (!Page.IsPostBack )
{
   lbUserName.DataBind();
}

答案 1 :(得分:1)

使用像这样的标签

<asp:label id="lblx" runat="server" ><%= HTTPContext.Current.User.Identity.Name %></asp:label>

答案 2 :(得分:1)

要像这样绑定文本,您必须创建自己的自定义表达式构建器。

首先,将这样的类添加到命名空间:

using System.Web.Compilation;
using System.CodeDom;

[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
        object parsedData, ExpressionBuilderContext context)
    {
        return new CodeSnippetExpression(entry.Expression);
    }
}

下一步是将其添加到您的web.config文件中:

<compilation debug="true">
    <expressionBuilders>
        <add expressionPrefix="Code" type="YourNameSpace.CodeExpressionBuilder"/>
    </expressionBuilders>
</compilation>

然后最终应该有效:

<asp:Label id="YourLabel" runat="server" Text='<%$ Code:HttpContext.Current.User.Identity.Name %>' />

实现简单的复杂方法,但这将允许您在整个项目中使用您想要的语法,因此可能值得付出额外的努力。

Reference