2012-03-20 6 views
0

だから私はHTTPContext.Current.User.Identity.Nameがコントロール内で動作していませんか?

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

を書いたが、私はのためのlableのこの外側を書いたとき、それはしかし、動作しません、私はラベルを持っていると私は

HTTPContext.Current.User.Identity.Name 

にこのラベルのテキストを設定したいです例:

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

+0

「テキスト= '<%= HTTPContext.Current.User.Identity.Name%>'」のテキストは何ですか: –

+0

これはasp:labelコントロール属性です – HOY

+1

@HOY:なぜラベルテキストを書きませんかコードの後ろに? –

答えて

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

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

まだnullが表示されています(編集:私の間違い) – HOY

+0

@HOYあなたはHttpContext.Current.User.Identity.Nameがnullではないことを確認する必要があります。上記の解決策はうまくいくはずです – Devjosh

+0

しかし、問題の同じ問題はどうですか?データバインディングはここでは機能していませんhttp://stackoverflow.com/questions/9863899/passing-windows-user-id-as-parameter-to-sqldatasource-gives-databinding-exceptio – HOY

1

使用独自のカスタム式ビルダーを作成する必要があります。このようなテキストをバインドするには、この

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

のようなラベル。

まず、あなたの名前空間に、そのようなクラスを追加します。

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

は、最終的にこの作業をする必要があります::

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ファイルにこれを追加して

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

単純なものを実現する複雑な方法ですが、これにより、あなたが望む構文を使用することができます余分な努力の価値があるかもしれません。

Reference