未生成ASP.NET MVC 3用户配置文件

时间:2011-11-29 02:49:54

标签: asp.net-mvc asp.net-mvc-3

对于我的ASP.NET MVC 3应用程序(使用Razor),我的web.config有:

<profile>
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties>
    <add name="FirstName"/>
    <add name="LastName"/>
  </properties>
</profile>

通过阅读文档,我理解ASP.NET将自动生成HttpContext的属性,以便我可以像这样访问它们:

 // MyController.cs

 Email = u.Email;
 FirstName = HttpContext.Profile.FirstName;
 LasttName = HttpContext.Profile.LastName;

然而,编译器惹人注意,.FirstName.LastName不存在。

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

尝试这种方法:

  1. 创建一个类(例如,将其命名为UserProfile),扩展ProfileBase
  2. 添加您的公共属性Email等(不要忘记{get;set;}
  3. 更改您的Web.config,如下所示(将继承更改为您的命名空间)
  4. 您现在应该可以通过(UserProfile)HttpContext.Current.Profile
  5. 访问它了

    您的Web.config:

    <profile defaultProvider="AspNetSqlProfileProvider" inherits="Namespace.To.Your.UserProfile">
        <providers>
            <clear/>
            <add name="AspNetSqlProfileProvider" connectionStringName="ConnectionStringName" type="System.Web.Profile.SqlProfileProvider" applicationName="App" />
        </providers>
    </profile>
    

    您的个人资料类:

    public class UserProfile : ProfileBase
    {
        public string Email
        {
            get { return (string)GetPropertyValue("Email"); }
            set { SetPropertyValue("Email", value); }
        }
    }
    

答案 1 :(得分:0)

使用ASP.NET Web窗体时,通过代理对象访问配置文件数据,该对象的属性对应于配置文件属性。此功能不适用于MVC Framework应用程序 你可以像这样获得用户配置文件属性值:

public ActionResult Index() 
{
    ViewBag.Name = HttpContext.Profile["Name"];
    ViewBag.City = HttpContext.Profile.GetProfileGroup("Address")["City"];
    return View();
}

它将返回当前登录的用户配置文件属性值。