我有一个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
UserId
和UserName
是默认设置,但我添加了FullName
并使其正常运行。当我创建新用户时,他们的全名将被放入数据库中的FullName
字段。
如何从Razor视图中访问FullName
?
我不想使用会话,ViewData或模型。事实上,我想在每个页面上显示它,所以通过控制器执行此操作不是一个选项。
我希望通过@Profile.Item("FullName")
或@Profile.PropertyValues("FullName")
访问它,但Profile对象为空。我该如何设置?
答案 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)