0

我正在尝试以编程方式创建新成员。事实上,我需要构建一个函数来从电子表格中导入成员。

我构建了一个继承 ProfileBase 的成员类,并且可以在他注册时以编程方式创建一个成员,但这需要他登录以更新完整的个人资料。因此,一个会员注册,他的会员资格被创建,我登录他,创建他的个人资料并注销他。这对用户不可见,但在后台运行良好。

现在我需要通过 umbraco 后台的一个功能来导入成员。我能够创建成员,但我无法更新他们的配置文件,这些配置文件使用 web.config、umbraco 和我的成员类中设置的自定义属性。我只是在我的数据库中得到空的个人资料。

知道在这种情况下我能做什么吗?如何在不登录会员的情况下更新会员资料?谢谢

4

1 回答 1

0

我最近自己做了一些非常相似的事情,假设你的 Member 类看起来像下面这样(或者至少做同样的事情)。

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
}

然后使用以下方法应该允许您检索成员、更新属性并保存它们:

var existingMember = MemberProfile.Create(username) as MemberProfile;
existingMember.FirstName = firstName;

existingMember.Save();

令人困惑的是 Create() 方法实际上返回现有用户,他们只是出于某种原因将其称为 create ......

于 2013-07-26T14:48:16.653 回答