在Umbraco中以编程方式创建新成员

时间:2015-01-07 13:05:32

标签: c# model-view-controller umbraco

我正在尝试以编程方式为我的Umbraco网站创建一个新成员,但我不确定我是否正确地执行此操作。

我的代码如下所示:

 MemberType demoMemberType = new MemberType(1040); //id of membertype ‘demo’
 Member newMember = Member.MakeNew(newEmployee.FirstName + " " + newEmployee.LastName, demoMemberType, new umbraco.BusinessLogic.User(0));

 newMember.Email = "test@testmail.com";
 newMember.Password = "password";
 newMember.LoginName = "Test";
 newMember.getProperty("firstName").Value = "test";

 newMember.Save();

但是当我运行我的代码时,我看不到任何出现在我的Umbraco中的东西。有人可以告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:11)

如果您使用umbraco 7,最好使用会员服务。以下是您可以采用的简单方法。

public int RegisterMember(string memberName, string emailAddress, string memberPassword, string memberTypeAlias, string memberGroupName)
{
        int umbracoMemberId = -1;

        if (!MemberExists(emailAddress))
        {
            IMember newMember = ApplicationContext.Current.Services.MemberService.CreateMember(emailAddress, emailAddress, memberName, memberTypeAlias);

            try
            {
                ApplicationContext.Current.Services.MemberService.Save(newMember);
                ApplicationContext.Current.Services.MemberService.SavePassword(newMember, memberPassword);
                ApplicationContext.Current.Services.MemberService.AssignRole(newMember.Id, memberGroupName);
                umbracoMemberId = newMember.Id;
            }
            catch (Exception ex)
            {
                throw new Exception("Unable to create new member " + ex.Message);
            }
        }

        return umbracoMemberId;
}


public bool MemberExists(string emailAddress)
{
        return (ApplicationContext.Current.Services.MemberService.GetByEmail(emailAddress) != null);
}

答案 1 :(得分:3)

主题非常复杂,但以下是您的模型和控制器的一些代码,它们可以让您走上正确的轨道。希望你对MVC了解得足够多。

您的模型可能包含以下内容,并使用视图中的输入填充

    using System.ComponentModel.DataAnnotations;
    using System.Web;

    namespace MyProject.Models
    {
        public class MemberModel 
        {

            [Required]
            public string Name { get; set; }

            [Required]
            [EmailAddress]
            public string Email { get; set; }

            [Required]
            public string Password { get; set; }
        }
}

您的控制器可能如下所示:

using System.Web.Mvc;
using MyProject.Models;
using Umbraco.Web.Mvc;

namespace MyProject.Controllers
{
    public class MemberController : SurfaceController
    {
        public ActionResult SignUp(MemberModel model)
        {
            if (!ModelState.IsValid) 
                return CurrentUmbracoPage();

            var memberService = Services.MemberService;
            if (memberService.GetByEmail(model.Email) != null)
            {
                ModelState.AddModelError("", "Member already exists");
                return CurrentUmbracoPage();
            }
            var member = memberService.CreateMemberWithIdentity(model.Email, model.Email, model.Name, "MyMemberType");

            memberService.Save(member);

            memberService.SavePassword(member,model.Password);

            Members.Login(model.Email, model.Password);

            return Redirect("/");
        }
    }
}

答案 2 :(得分:0)

根据Umbraco版本,提供的代码示例已过期。

  

Umbraco 4改变了Umbraco会员模型以使用ASP.NET   Membership Provider模型,意思是所有抽象类中的哪一个   提供的开箱即用的ASP.NET能够访问   Umbraco成员。在MSDN(以及其他方面)上有很多好的资源   使用ASP.NET成员资格的网站,建议的起点是   这里。

文章:

http://our.umbraco.org/wiki/how-tos/membership-providers

http://msdn.microsoft.com/en-us/library/tw292whz.aspx