“名称ProfileCommon在当前上下文中不存在”

时间:2010-08-26 06:07:46

标签: asp.net

..一直在浏览网但没有运气..我需要使用ProfileCommon但是我无法引用任何程序集来使用它..有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

如果您拥有ASP.NET网站,而不是应用程序项目,并且使用Profile,则ProfileCommon文件会在临时ASP.NET文件中自动生成。当您使用ASP.NET项目时,您需要自己创建它。 Take a look at this sample on how to implement it on your own。该示例用于MVC应用程序项目,但由于它基于ASP.NET本身,因此概念保持不变。

答案 1 :(得分:1)

这是框架生成的动态类型。 在运行时,“ProfileCommon”类型存在。

如果您可以使用C#4.0语言功能,则可以将ProfileCommon的行为包装在动态对象中。

我有以下扩展属性

<profile enabled="true" >
      <properties>
        <add name="FirstName" type="String" />
        <add name="LastName" type="String" />
      </properties>
</profile>

使用动态对象的代码示例是

dynamic profile = new ProfileData();
var name = profile.FirstName + ' ' + profile.LastName;

ProfileData的实现:

public class ProfileData: DynamicObject
    {
        private readonly ProfileBase profileBase;

        /// <summary>
        /// Profile Data for the current user.
        /// </summary>
        public ProfileData()
        {
            profileBase = HttpContext.Current.Profile;
        }

        /// <summary>
        /// Profile data for user with name <paramref name="userName"/>
        /// </summary>
        /// <param name="userName"></param>
        public ProfileData(string userName)
        {
            profileBase = ProfileBase.Create(userName);         
        }

        // If you try to get a value of a property 
        // not defined in the class, this method is called.
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            try
            {
                result = profileBase.GetPropertyValue(binder.Name);
            }
            catch(SettingsPropertyNotFoundException)
            {
                result = null;
                return false;
            }
            return true;            
        }

        // If you try to set a value of a property that is
        // not defined in the class, this method is called.
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            try
            {
                profileBase.SetPropertyValue(binder.Name, value);
                return true;
            }
            catch (SettingsPropertyNotFoundException)
            {               
                return false;
            }           
        }

        /// <summary>
        /// Persist the profile data.
        /// </summary>
        public void Save()
        {
            profileBase.Save();
        }
    }