从vb.net中的LoggedInTemplate中删除域名

时间:2011-02-17 14:12:18

标签: asp.net vb.net

我有一个使用Windows身份验证的.Net 4网络应用程序,一切运行良好但是有一个微不足道的错误让我疯了!

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 

但是我无论如何都不能在程序上看到修改这个?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我能看到的唯一选择是重新实现LoginName控件,批量或继承LoginName并重新实现RenderContents方法以适当地格式化用户名。从Reflector中,当前代码(对于.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类的Friend ReadOnly属性,通过另一个名为LoginUtil的内部类从HttpContext.Current.User获取用户名。