2015-03-19 32 views
0

我目前正在更新一个旧的Web表单项目的过程中,我们有点卡住能够压缩代码。在母版页中使用User.Identity.Name

作为一个背景,我去年只学过C#,并且一直在MVC中开发,不过这个项目是用vb.net和WebForms编写的,它有一些非常愚蠢和过时的逻辑/方法。

无论如何,在旧版本有下面的代码片段在每一页上:

currentUser = Membership.GetUser(User.Identity.Name) 

Dim myMasterPage As Main = CType(Page.Master, Main) 
myMasterPage.SetCustomerGreeting("You are logged in as: " & currentUser.UserName) 

的代码被重复多次,并有这似乎很不好我在多个地方为它而改变在整个网站上保持一致。这是目前用来输出:

You are logged in as: Jason 

在我Main.Master.vb我现在已经添加以下代码:

currentUser = Membership.GetUser(HttpContext.Current.User.Identity.Name) 
    If (currentUser IsNot Nothing) Then 
     SetCustomerGreeting("You are logged in as: " & currentUser.UserName) 
    End If 

,输出:

You are logged in as : [email protected] 

我的问题是,我怎么才能让它输出实际的用户名(本例中是jason)而不是电子邮件地址,因为当我检索currentUser变量的数据时,它不会让我在我的主页面中使用User.Identity.Name。

任何帮助将不胜感激。

回答

0

作为一种帮助:在内容页面中定义@MasterType将允许您摆脱类型转换(CType)。它提供了一种创建ASP.NET主页的强类型引用的方法,它将允许您直接调用SetCustomerGreeting。但是,我认为您不需要SetCustomerGreeting。只需使用直接在主页上的语法如下(或类似的东西):

<%=HttpContext.Current.User.Identity.Name %> 

很是怪异,虽然该用户名返回用户的电子邮件ADRES,而不是名字。

+0

谢谢。这是我已经使用,虽然。你提到的CType的东西是我想要摆脱的旧代码,甚至没有被我编程。 – jezzipin 2015-03-19 11:07:25