2012-03-20 47 views
0

我有一个标签,我想设置这个标签的文本HTTPContext.Current.User.Identity.Name不在控件内部工作吗?

HTTPContext.Current.User.Identity.Name 

所以我写了

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

但是当我写下这个拉布勒的外面但是,它没有工作,例如:

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

它的工作原理。

+0

什么是Text中的文本<%= HTTPContext.Current.User.Identity.Name%>' – 2012-03-20 12:31:37

+0

它是一个asp:标签控件属性 – HOY 2012-03-20 12:32:21

+1

@HOY:为什么不写标签文本在代码后面? – 2012-03-20 12:36:07

回答

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

在Page_Load中

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

仍然显示空(编辑:我的错误) – HOY 2012-03-20 12:39:56

+0

@你应该检查你的HttpContext.Current.User.Identity.Name是否为空。上述解决方案应该可以工作 – Devjosh 2012-03-20 12:42:34

+0

但问题中的同样问题呢?数据绑定不在这里工作http://stackoverflow.com/questions/9863899/passing-windows-user-id-as-parameter-to-sqldatasource-gives-databinding-exceptio – HOY 2012-03-26 07:42:16

1

使用标签这样

<asp:label id="lblx" runat="server" ><%= HTTPContext.Current.User.Identity.Name %></asp:label> 
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