Umbraco - 添加成员到组
Umbraco - Add member to group
我需要在您注册会员时将其放入特定的群组。我相信"sniper""Register Members"。我正在使用最新版本的 Umbraco。我正在调查,但我无法让它发挥作用。
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc
@using Umbraco.Web
@using Umbraco.Web.Controllers
@{
@*
You can specify a custom member type alias in the constructor, the default is 'Member'
for example, to use 'Custom Member' you'd use this syntax:
var registerModel = Members.CreateRegistrationModel("Custom Member");
*@
var registerModel = Members.CreateRegistrationModel();
@*
Configurable here:
registerModel.RedirectUrl - Optional. What path to redirect to if registration is successful.
By default the member will be redirected to the current umbraco page
unless this is specified.
registerModel.UsernameIsEmail - the default is true
if you want the username to be different from the email
address, set this to true and add a new Username field in
the form below
@Html.LabelFor(m => registerModel.Username)
@Html.TextBoxFor(m => registerModel.Username)
@Html.ValidationMessageFor(m => registerModel.Username)
*@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
}
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Html.RenderJsHere()
@using (Html.BeginUmbracoForm<UmbRegisterController>("HandleRegisterMember"))
{
<fieldset>
<legend>Register Member</legend>
@Html.ValidationSummary("registerModel", true)
@Html.LabelFor(m => registerModel.Name)
@Html.TextBoxFor(m => registerModel.Name)
@Html.ValidationMessageFor(m => registerModel.Name)
<br />
@Html.LabelFor(m => registerModel.Email)
@Html.TextBoxFor(m => registerModel.Email)
@Html.ValidationMessageFor(m => registerModel.Email)
<br />
@Html.LabelFor(m => registerModel.Password)
@Html.PasswordFor(m => registerModel.Password)
@Html.ValidationMessageFor(m => registerModel.Password)
<br />
@if (registerModel.MemberProperties != null)
{
@*
It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type.
*@
for (var i = 0; i < registerModel.MemberProperties.Count; i++)
{
@Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)
@*
By default this will render a textbox but if you want to change the editor template for this property you can
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
render your specific editor template like:
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
*@
@Html.EditorFor(m => registerModel.MemberProperties[i].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
<br />
}
}
@Html.HiddenFor(m => registerModel.MemberTypeAlias)
@Html.HiddenFor(m => registerModel.RedirectUrl)
@Html.HiddenFor(m => registerModel.UsernameIsEmail)
<button>Register</button>
</fieldset>
}
您应该创建一个自定义控制器来处理您的注册逻辑,诸如此类
public class YourCustomUmbController : SurfaceController
{
[HttpPost]
public ActionResult RegisterMember(RegisterModel model)
{
MembershipCreateStatus status;
var member = Members.RegisterMember(model, out status, model.LoginOnSuccess);
...
//add roles / groups to the member (it assumes the group admin has been created)
MemberGroup mg = MemberGroup.GetByName("admin");
member.AddGroup(mg.Id);
...
}
}
并这样称呼它:
@using (Html.BeginUmbracoForm<YourCustomUmbController>("RegisterMember"))
您也可以通过将事件处理程序附加到成员创建的事件来实现此目的。
这将允许您使用 Umbraco 开箱即用的注册会员局部视图模板。
例子
using Umbraco.Core;
using Umbraco.Core.Events;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
namespace YourApp.EventHandlers
{
public class MemberRegistrationEventHandler : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase, umbracoApplication, ApplicationContext applicationContext)
{
MemberService.Created += MemberService_Created;
}
private void MemberService_Created(IMemberService sender, NewEventArgs<IMember> e)
{
// Always add user to "Main Client" group
sender.AssignRole(e.Entity.Username, "Main Client");
}
}
}
Note: You might need to add sender.Save(e.Entity)
if using an older version of Umbraco
假设您采用与@EyesCream 相同的方法来创建您自己的自定义控制器,那么在 Umbraco 7 中执行此操作的新方法是:
public class YourCustomUmbController : SurfaceController
{
[HttpPost]
public ActionResult RegisterMember(RegisterModel model)
{
var memberService = ApplicationContext.Current.Services.MemberService;
// Create member.
var member = MemberService.CreateMemberWithIdentity(model.Email, model.Email, model.Name, "Member");
// Save the member.
memberService.Save(member);
memberService.SavePassword(member, model.Password);
// Assign member to group.
MemberService.AssignRole(member.Id, "GroupName");
}
}
使用以下方式调用:
@using (Html.BeginUmbracoForm<YourCustomUmbController>("RegisterMember"))
这使用 Umbraco 中可用的新服务,而不是旧的 Umbraco 4 服务。
参考:http://amdonnelly.blogspot.co.uk/2014/06/programmatically-add-new-member-to.html
在 Umbraco 7.5.11 中测试。
我需要在您注册会员时将其放入特定的群组。我相信"sniper""Register Members"。我正在使用最新版本的 Umbraco。我正在调查,但我无法让它发挥作用。
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc
@using Umbraco.Web
@using Umbraco.Web.Controllers
@{
@*
You can specify a custom member type alias in the constructor, the default is 'Member'
for example, to use 'Custom Member' you'd use this syntax:
var registerModel = Members.CreateRegistrationModel("Custom Member");
*@
var registerModel = Members.CreateRegistrationModel();
@*
Configurable here:
registerModel.RedirectUrl - Optional. What path to redirect to if registration is successful.
By default the member will be redirected to the current umbraco page
unless this is specified.
registerModel.UsernameIsEmail - the default is true
if you want the username to be different from the email
address, set this to true and add a new Username field in
the form below
@Html.LabelFor(m => registerModel.Username)
@Html.TextBoxFor(m => registerModel.Username)
@Html.ValidationMessageFor(m => registerModel.Username)
*@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
}
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Html.RenderJsHere()
@using (Html.BeginUmbracoForm<UmbRegisterController>("HandleRegisterMember"))
{
<fieldset>
<legend>Register Member</legend>
@Html.ValidationSummary("registerModel", true)
@Html.LabelFor(m => registerModel.Name)
@Html.TextBoxFor(m => registerModel.Name)
@Html.ValidationMessageFor(m => registerModel.Name)
<br />
@Html.LabelFor(m => registerModel.Email)
@Html.TextBoxFor(m => registerModel.Email)
@Html.ValidationMessageFor(m => registerModel.Email)
<br />
@Html.LabelFor(m => registerModel.Password)
@Html.PasswordFor(m => registerModel.Password)
@Html.ValidationMessageFor(m => registerModel.Password)
<br />
@if (registerModel.MemberProperties != null)
{
@*
It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type.
*@
for (var i = 0; i < registerModel.MemberProperties.Count; i++)
{
@Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)
@*
By default this will render a textbox but if you want to change the editor template for this property you can
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
render your specific editor template like:
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
*@
@Html.EditorFor(m => registerModel.MemberProperties[i].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
<br />
}
}
@Html.HiddenFor(m => registerModel.MemberTypeAlias)
@Html.HiddenFor(m => registerModel.RedirectUrl)
@Html.HiddenFor(m => registerModel.UsernameIsEmail)
<button>Register</button>
</fieldset>
}
您应该创建一个自定义控制器来处理您的注册逻辑,诸如此类
public class YourCustomUmbController : SurfaceController
{
[HttpPost]
public ActionResult RegisterMember(RegisterModel model)
{
MembershipCreateStatus status;
var member = Members.RegisterMember(model, out status, model.LoginOnSuccess);
...
//add roles / groups to the member (it assumes the group admin has been created)
MemberGroup mg = MemberGroup.GetByName("admin");
member.AddGroup(mg.Id);
...
}
}
并这样称呼它:
@using (Html.BeginUmbracoForm<YourCustomUmbController>("RegisterMember"))
您也可以通过将事件处理程序附加到成员创建的事件来实现此目的。
这将允许您使用 Umbraco 开箱即用的注册会员局部视图模板。
例子
using Umbraco.Core;
using Umbraco.Core.Events;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
namespace YourApp.EventHandlers
{
public class MemberRegistrationEventHandler : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase, umbracoApplication, ApplicationContext applicationContext)
{
MemberService.Created += MemberService_Created;
}
private void MemberService_Created(IMemberService sender, NewEventArgs<IMember> e)
{
// Always add user to "Main Client" group
sender.AssignRole(e.Entity.Username, "Main Client");
}
}
}
Note: You might need to add
sender.Save(e.Entity)
if using an older version of Umbraco
假设您采用与@EyesCream 相同的方法来创建您自己的自定义控制器,那么在 Umbraco 7 中执行此操作的新方法是:
public class YourCustomUmbController : SurfaceController
{
[HttpPost]
public ActionResult RegisterMember(RegisterModel model)
{
var memberService = ApplicationContext.Current.Services.MemberService;
// Create member.
var member = MemberService.CreateMemberWithIdentity(model.Email, model.Email, model.Name, "Member");
// Save the member.
memberService.Save(member);
memberService.SavePassword(member, model.Password);
// Assign member to group.
MemberService.AssignRole(member.Id, "GroupName");
}
}
使用以下方式调用:
@using (Html.BeginUmbracoForm<YourCustomUmbController>("RegisterMember"))
这使用 Umbraco 中可用的新服务,而不是旧的 Umbraco 4 服务。
参考:http://amdonnelly.blogspot.co.uk/2014/06/programmatically-add-new-member-to.html
在 Umbraco 7.5.11 中测试。