如何在ASP.NET MVC的视图中填充Profile变量?

时间:2009-08-08 16:51:17

标签: asp.net-mvc asp.net-membership profile

在ASP.NET MVC的视图中,我可以像这样访问配置文件和配置文件成员:

<%= Profile.Name %> - <%= Profile.Karma %>

但是如何填充Profile变量?它似乎在HttpContext.Current.Profile中。我用CurrentUser方法编写了一个自定义Profile类,如下所示:

static public Profile CurrentUser {
    get {
        return (Profile) (ProfileBase.Create(Membership.GetUser().UserName));
    }
}

我在Web.config中指出了该类:

<profile inherits="MyProject.Models.Profile" defaultProvider="AspNetSqlProfileProvider" enabled="true">
    <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/" />
    </providers>
</profile>

此:

var p = CurrentUser.Profile

成功地给了我个人资料,但我不能这样设置:

HttpContext.Profile = CurrentUser.Profile;

因为HttpContext.Profile是只读的。我收到错误:

  

错误18属性或索引器'System.Web.HttpContextBase.Profile'无法分配给 - 它只读C:... \ Controller.cs 26 17 MyProject

此外,我需要为每个视图分配配置文件,以便以常规方式在右上角显示已登录用户的名称。我该怎么办?

3 个答案:

答案 0 :(得分:0)

据推测,您已在web.config中设置了默认配置文件提供程序

<profile defaultProvider="MyCustomProfileProvider">
  <properties>
    <!-- etc. -->
  </properties>
</profile>

不确定MVC,但对于标准的asp.net是必需的。

答案 1 :(得分:0)

我得到一个空名称的原因并不是我没有得到配置文件,而是数据库中的配置文件实际上是空的(由于我的代码中存在无关的错误)。我所谈论的一切都是让个人资料发挥作用所需的一切。

答案 2 :(得分:-1)

  

我需要分配配置文件   每个视图,这样的名称   登录用户可以显示在   以通常的方式右上方

您可以创建登录控件,并在控件中写下此内容。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
    if (Request.IsAuthenticated) {
%>
        Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
        [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<%
    }
    else {
%> 
        [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
<%
    }
%>

HttpContext对象也有一个用户属性。