定制配置文件属性

时间:2013-12-12 15:19:53

标签: asp.net profile

按照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">)。

当Block代码在CodeBehind中时,Profile看起来实际上是一个不同的对象/类。此外,如果我将代码从CodeBehind移动到嵌入块,我在访问其他一些类和方法时遇到问题,例如Security.Cryptography.SHA1CryptoServiceProvider或我自己项目中模块的函数。

我想在从CodeBehind访问时,我错过了Profile.IdRole的一些前缀,你能帮忙吗?

错误信息:

在CodeBehind中,当我使用Profile.IdRole时,我收到错误 IdRole不是个人资料的成员

如果我使用HttpContext.Current.Profile.IdRole我得 IdRole不是System.Web.Profile.ProfileBase的成员

当我在嵌入代码中使用Profile.IdRole并将鼠标指向它时,我得到了一个tooltop:受保护的ReadOnly属性配置文件为ProfileCommon ,现在我看到了ReadOnly I&#39;我不确定我是否遵循了正确的文档...帮助?

谢谢

1 个答案:

答案 0 :(得分: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)