2015-01-07 23 views
6

Próbuję programowo utworzyć nowego członka mojej witryny Umbraco, ale nie jestem pewien, czy robię to poprawnie.Tworzenie nowego elementu programowo w Umbraco

Mój kod wygląda następująco:

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 = "[email protected]"; 
newMember.Password = "password"; 
newMember.LoginName = "Test"; 
newMember.getProperty("firstName").Value = "test"; 

newMember.Save(); 

Ale gdy uruchamiam mój kod, nie widzę niczego pojawiające się w moim Umbraco. Czy ktoś może mi powiedzieć, co zrobiłem źle?

Odpowiedz

0

W zależności od wersji Umbraco, dostarczona próbka kodu jest nieaktualna.

Umbraco 4 zmieniony model członkostwa Umbraco korzystania z modelu dostawcy ASP.NET Membership, co oznacza, że ​​wszystkie klasy abstrakcyjne, które są przewidziane out-of-the-box z ASP.NET są zdolne do uzyskiwania dostępu do Członek Umbraco. W witrynie MSDN (i innych witrynach o numerach ) dostępnych jest wiele dobrych zasobów do korzystania z członkostwa w programie ASP.NET. Sugerowanym punktem wyjścia jest tutaj tutaj.

Artykuły:

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

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

3

Temat jest bardzo zaangażowany, ale po jakiś kod dla danego modelu i kontrolera, który powinien umieścić na właściwym torze. Mam nadzieję, że wiesz wystarczająco dużo o MVC, aby to osiągnąć.

Twój model może zawierać coś jak poniżej i być wypełniana z wejściem od widoku

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; } 
     } 
} 

Kontroler może być coś jak poniżej:

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("/"); 
     } 
    } 
} 
9

Jeśli używasz Umbraco 7 najlepiej jest korzystać z usługi członka. Poniżej znajduje się proste podejście, które można zastosować, aby to osiągnąć.

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); 
}