..一直在浏览网但没有运气..我需要使用ProfileCommon但是我无法引用任何程序集来使用它..有人可以帮忙吗?
答案 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();
}
}