umbra v6.0.5에서 v7.2.1로 업그레이드하는 중입니다.버전 7의 UmbracoMemberProfileProvider가 존재하지 않습니다.이 대체품은 무엇입니까?
public class MemberProfile : ProfileBase
{
#region Firstname
private const string FIRSTNAME = "_firstname";
[SettingsAllowAnonymous(false)]
public string FirstName
{
get
{
return GetCustomProperty(FIRSTNAME);
}
set
{
SetCustomProperty(FIRSTNAME, value);
}
}
#endregion
#region Get and Set base properties
private string GetCustomProperty(string propertyName)
{
var retVal = "";
var prop = base.GetPropertyValue(propertyName);
if (prop != null)
{
retVal = prop.ToString();
}
return retVal;
}
private void SetCustomProperty(string propertyName, object value)
{
var prop = base[propertyName];
if (prop != null)
{
base.SetPropertyValue(propertyName, value);
}
}
#endregion
}
이것의 목적은 그래서 작업 할 수있다 :
<profile defaultProvider="UmbracoMemberProfileProvider" enabled="true" inherits="NFOPP.Website.usercontrols.Security.MemberProfile, NFOPP.Website">
<providers>
<clear />
<add name="UmbracoMemberProfileProvider" type="umbraco.providers.members.UmbracoProfileProvider, umbraco.providers" />
</providers>
<properties>
<clear />
<add name="_title" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" />
<add name="_firstname" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" />
<add name="_lastname" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" />
<add name="_memberNumber" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" />
</properties>
</profile>
나는이 같은 클래스가 : 내 전류 (V6)의 web.config에서
나는 다음이 내 MemberProfile 객체를 찾아 FirstName과 같은 속성에 직접 액세스합니다.
"umbraco.providers.members.UmbracoProfileProvider"가 "ProfileBase"를 재정의하는 클래스를 올바르게 연결시킬 수 없다는 의미가 더 이상 존재하지 않는 것 같습니다.로드하려고 할 때 "MemberProfile"개체에 액세스하는 페이지 "No PropertyType은 제공된 별칭 _firstname을 사용하여 존재하지 않음"이라고 말합니다.
더 좋은 방법은 없으며 v7에서는 더 이상 필요하지 않은 구성 섹션이 실제로 필요합니다. 공급자?
솔루션 구현 :
#region Get and Set base properties
private string GetCustomProperty(string propertyName)
{
var retVal = "";
if (_member.Properties.IndexOfKey(propertyName) > -1)
{
var prop = _member.Properties[propertyName];
if (prop != null && prop.Value != null)
{
retVal = prop.Value.ToString();
}
}
return retVal;
}
private void SetCustomProperty(string propertyName, object value)
{
if (_member.Properties.IndexOfKey(propertyName) > -1)
{
var prop = _member.Properties[propertyName];
if (prop != null)
{
prop.Value = value;
}
}
}
#endregion
:
public static MemberProfile Get(IMemberService memberService, UmbracoContext context)
{
var membershipHelper = new Umbraco.Web.Security.MembershipHelper(context);
var profileModel = membershipHelper.GetCurrentMemberProfileModel();
if (profileModel != null)
{
return Get(profileModel.UserName, memberService);
}
else
{
return null;
}
}
public static MemberProfile Get(string userName, IMemberService memberService)
{
var member = memberService.GetByUsername(userName);
return new MemberProfile(member);
}
나는 또한 이렇게 같은 가져 오기 및 설정 속성 방법 업데이트 :
내가 내 회원 프로필 클래스에 다음과 같은 방법을 추가 이것을 사용하려면 멤버 객체가 필요한 곳이면 어디에서든지 다음을 호출했습니다.
var member = MemberProfile.Get(ApplicationContext.Current.Services.MemberService, Umbraco.Web.UmbracoContext.Current);
이 솔루션과 다른 사람들이 사용자 지정 속성을 멤버에 추가하고 코드에서 액세스하는 방법에 대해 생각해 주시면 감사하겠습니다.
컨텍스트 전달을 기반으로 멤버를 얻는 몇 가지 메서드로 내 MemberProfile 클래스를 수정했습니다. (내가 한 것을 보여주기 위해 내 질문을 편집했습니다.) 새 API에 대한 포인터 주셔서 감사합니다 :) – g7876413