2011-11-29 67 views
1

對於我的ASP.NET MVC 3應用程序(用剃刀)我web.config有這樣的:ASP.NET MVC 3個的用戶配置文件不產生

<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不存在。

這是怎麼回事?

回答

1

試試這個辦法:

  1. 創建擴展ProfileBase
  2. 添加您的公共屬性的類(命名爲UserProfile例如)Email等(不要忘記{get;set;}
  3. 更改您的Web.config如下所示(將繼承改爲您的名稱空間)
  4. 您應該可以通過(UserProfile)HttpContext.Current.Profile訪問它

你的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); } 
    } 
} 
+0

工作。謝謝。但你會介意解釋爲什麼記錄的行爲不起作用嗎? – tig

+0

我不相信MVC應用程序的ID編譯方式與他們在Web表單Web應用程序中執行的方式相同。一些概率,我認爲與網站訴網絡應用程序 –

+0

答案是我的項目是一個Web應用程序而不是一個網站,編譯不會發生的Web應用程序。這篇文章真的很有幫助:http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/ – tig

0

當使用ASP.NET Web窗體,配置文件數據是通過代理訪問對象其屬性對應於配置文件屬性。此功能不適用於MVC Framework應用程序。
u能得到用戶的配置文件屬性值,就像這樣:

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

將返回當前登錄的用戶配置文件屬性值。