如何在Razor视图中使用Profile对象?

时间:2013-03-27 23:37:11

标签: vb.net asp.net-mvc-4 user-profile razor-2

我有一个MVC4应用程序,我一直在关注Pluralsight视频教程。

我的UserProfile表格中添加了一个属性,而且效果很好:

<Table("UserProfile")>
Public Class UserProfile
    <Key>
    <DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)>
    Public Property UserId As Integer
    Public Property UserName As String
    Public Property FullName As String
End Class

UserIdUserName是默认设置,但我添加了FullName并使其正常运行。当我创建新用户时,他们的全名将被放入数据库中的FullName字段。

如何从Razor视图中访问FullName

我不想使用会话,ViewData或模型。事实上,我想在每个页面上显示它,所以通过控制器执行此操作不是一个选项。

我希望通过@Profile.Item("FullName")@Profile.PropertyValues("FullName")访问它,但Profile对象为空。我该如何设置?

Profile object is empty.png

1 个答案:

答案 0 :(得分:2)

由Phil Haack查看this post。或者this one on develoq

您可以为包含Profile对象作为属性的视图创建新的Base页面。

public abstract class ProfileWebViewPage<T> : System.Web.Mvc.WebViewPage
{
  public UserProfile Profile { get; set; }

  public override void InitHelpers()
  {
    base.InitHelpers();
    //Set your Profile here. 
  }
}

然后将其设置为webconfig中的基本类型(在views文件夹中):

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="MyProject.ProfileWebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

然后您可以通过以下方式访问它:

@Profile.FullName

修改

好的,对不起,我以为你有这些信息,而且只是想找到一种方法来访问你的网页。

您不能(AFAIK)使用SimpleMembershipProvider访问自定义配置文件信息。我认为您需要查看自定义ProfileProvider(http://dotnetnsqlcorner.blogspot.co.nz/2012/05/implementing-custom-profile-in-aspnet.html)或使用SqlProfileProvider(Implementing Profile Provider in ASP.NET MVC)签出

或者:

你可以使用EF来进行数据访问以直接进入配置文件(使用DB上下文UserProfile所在的位置:

Profile = (new UsersContext()).UserProfiles.SingleOrDefault(u => u.UserName = User.Identity.Name)