2013-12-12 188 views
0

these說明我能爲一個配置文件添加此到Web.config中定義自定義屬性:自定義配置文件屬性

<profile defaultProvider="DefaultProfileProvider"> 
    <providers> 
     <add 
     name="DefaultProfileProvider" 
     type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     connectionStringName="MYCONEXION" 
     applicationName="MyApp" /> 
    </providers> 
    <properties> 
    <add name="IdRole" type="Integer" /> 
    <add name="IdUser" type="Integer" /> 
    </properties> 
</profile> 

我發現的問題是,我可以訪問此屬性(Profile.IdRole)時分組碼採用嵌入式在腳本中,在塊<script language="vb" runat="server">

當代碼塊在CodeBehind中時,它看起來像Profile實際上是一個不同的對象/類。另外,如果我將代碼從CodeBehind移動到嵌入塊,我遇到了一些其他類和方法的問題,例如Security.Cryptography.SHA1CryptoServiceProvider或我自己項目中的模塊中的函數。

我想我錯過了一些前綴到Profile.IdRole從CodeBehind訪問它時,你能幫忙嗎?

錯誤信息:

在代碼隱藏,當我使用Profile.IdRole我得到錯誤IdRole不是檔案的成員。

如果我使用HttpContext.Current.Profile.IdRole我得到IdRole不System.Web.Profile.ProfileBase

當我使用嵌入式代碼Profile.IdRole,將鼠標在它的成員,我得到一個tooltop:只讀保護Property Profile作爲ProfileCommon,現在我看到ReadOnly我不確定我是否遵循正確的文檔...幫助?

謝謝

+0

嘗試'HttpContext.Current.Profile'? – RobH

+0

不,不同的錯誤,但也是一個錯誤,我會更新這個信息的問題 –

+0

你是否在你的代碼中使用VB或C#? – RobH

回答

0

的ProfileCommon類是強類型類,從ProfileBase繼承。它在運行時創建,並使用在您的Web配置文件中定義的定製屬性信息。由於它是在運行時創建的,因此它不能直接從代碼隱藏中訪問。

從後臺代碼,訪問當前用戶的配置文件,使用

HttpContext.Current.Profile 

要訪問其他用戶的個人資料,使用

System.Web.Profile.ProfileBase.Create(username) 

兩個函數返回ProfileBase類的一個實例。由於它不使用你的自定義屬性強類型,你必須使用GetPropertyValueSetPropertyValue方法,像這樣

Dim profile as ProfileBase = ProfileBase.Create("someuser") 
profile.GetPropertyValue("IdRole") 
profile.SetPropertyValue("IdRole", 42)