2011-02-17 61 views
2

我有一个使用Windows身份验证的.Net 4网络应用程序,所有的工作都很好,但是有一个微不足道的错误让我疯狂!从vb.net的LoggedInTemplate中剥离域名

Visual Studio中拼下显示谁在

<LoggedInTemplate> 
    Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>! 
    [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="http://somewhere/default.aspx"/> ] 
</LoggedInTemplate> 

的问题是,虽然,这是显示为<domain>/user而不仅仅是这我假设它是从

拉动该值的用户名登录
System.Threading.Thread.CurrentPrincipal.Identity.Name 

但是我无法用编程方式来修改这个?

回答

1

一个简单的解决方法是在模板中的登录名控件位置使用标签。您可以从User.Identity.Name中剥离域,并将剥离的版本放入标签中。我也有这个问题,我用标签(至少这是我记得)

+0

我喜欢Rob的实现/答案,但对于简单的应用程序,这是我采取了你的建议。谢谢 – Dean 2011-02-28 09:48:02

0

自定义输出的唯一内置方法是LoginName.FormatString属性,不幸的是,所有这些都允许您提供用户名嵌入的格式字符串,例如“Welcome,DOMAIN \ NAME”,而不仅仅是“DOMAIN \名称”。

我能看到的唯一选择是重新实现LoginName控件,无论是批发还是继承LoginName并重新实​​现RenderContents方法以适当地设置用户名。从反射器,对于该当前代码(.NET 2.0)是:

Protected Friend Overrides Sub RenderContents(ByVal writer As HtmlTextWriter) 
    Dim userName As String = Me.UserName 
    If Not String.IsNullOrEmpty(userName) Then 
     userName = HttpUtility.HtmlEncode(userName) 
     Dim formatString As String = Me.FormatString 
     If (formatString.Length = 0) Then 
      writer.Write(userName) 
     Else 
      Try 
       writer.Write(String.Format(CultureInfo.CurrentCulture, formatString, New Object() { userName })) 
      Catch exception As FormatException 
       Throw New FormatException(SR.GetString("LoginName_InvalidFormatString"), exception) 
      End Try 
     End If 
    End If 
End Sub 

UserName是LoginName将类,经由另一个称为LoginUtil内部类从HttpContext.Current.User获取用户名的Friend ReadOnly属性。