Umbraco-将成员添加到组

Umbraco-将成员添加到组,umbraco,umbraco7,Umbraco,Umbraco7,当你注册一个成员时,我需要它,把它放在一个特定的组中。我相信“狙击手”“注册会员”。我正在使用最新版本的Umbraco。我正在调查,但我不能让它工作 @inherits Umbraco.Web.Macros.PartialViewMacroPage @using System.Web.Mvc.Html @using ClientDependency.Core.Mvc @using Umbraco.Web @using Umbraco.Web.Controllers @{ @*

当你注册一个成员时,我需要它,把它放在一个特定的组中。我相信“狙击手”“注册会员”。我正在使用最新版本的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>
}
@继承Umbraco.Web.Macros.PartialViewMacroPage
@使用System.Web.Mvc.Html
@使用ClientDependency.Core.Mvc
@使用Umbraco.Web
@使用Umbraco.Web.Controllers
@{
@*
您可以在构造函数中指定自定义成员类型别名,默认值为“成员”
例如,要使用“自定义成员”,请使用以下语法:
var registerModel=Members.CreateRegistrationModel(“自定义成员”);
*@
var registerModel=Members.CreateRegistrationModel();
@*
可在此处配置:
registerModel.RedirectUrl-可选。如果注册成功,则重定向到哪个路径。
默认情况下,成员将重定向到当前的umbraco页面
除非另有规定。
registerModel.UsernameIsEmail-默认值为true
如果您希望用户名与电子邮件不同
地址,将其设置为true并在中添加新的用户名字段
下表
@LabelFor(m=>registerModel.Username)
@Html.TextBoxFor(m=>registerModel.Username)
@Html.ValidationMessageFor(m=>registerModel.Username)
*@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
RequiresJs(“/umbraco_client/ui/jquery.js”);
RequiresJs(“/umbraco_client/Application/JQuery/JQuery.validate.min.js”);
RequiresJs(“/umbraco_client/Application/JQuery/JQuery.validate.unobtrusive.min.js”);
}
@*注意:这个renderchere代码应该放在主模板页面上,其他脚本标记都放在这个页面上*@
@Html.renderjsher()
@使用(Html.BeginUmbracoForm(“HandlerRegisterMember”))
{
注册会员
@Html.ValidationSummary(“registerModel”,true)
@LabelFor(m=>registerModel.Name)
@TextBoxFor(m=>registerModel.Name)
@Html.ValidationMessageFor(m=>registerModel.Name)

@LabelFor(m=>registerModel.Email) @Html.TextBoxFor(m=>registerModel.Email) @Html.ValidationMessageFor(m=>registerModel.Email)
@LabelFor(m=>registerModel.Password) @PasswordFor(m=>registerModel.Password) @Html.ValidationMessageFor(m=>registerModel.Password)
@if(registerModel.MemberProperties!=null) { @* 它将仅在成员类型的“信息”选项卡上显示标记为“成员可以编辑”的属性。 *@ 对于(变量i=0;iregisterModel.MemberProperties[i]。值,registerModel.MemberProperties[i]。名称) @* 默认情况下,这将呈现文本框,但如果要更改此属性的编辑器模板,可以 很容易更改它。例如,如果您想为这个字段呈现一个名为“MyEdit”的自定义编辑器,您可以 在~/Views/Shared/EditorTemplates/MyEditor.cshtml”中创建一个文件,然后将下一行代码更改为 呈现特定的编辑器模板,如下所示: @EditorFor(m=>profileModel.MemberProperties[i].Value,“MyEdit”) *@ @EditorFor(m=>registerModel.MemberProperties[i].Value) @Html.HiddenFor(m=>registerModel.MemberProperties[i]。别名)
} } @Html.HiddenFor(m=>registerModel.MemberTypeAlias) @Html.HiddenFor(m=>registerModel.RedirectUrl) @Html.HiddenFor(m=>registerModel.UsernameIsEmail) 登记 }
您应该创建一个自定义控制器来处理注册逻辑,类似于

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"))
@使用(Html.BeginUmbracoForm(“RegisterMember”))

您应该创建一个自定义控制器来处理注册逻辑,类似于

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"))
@使用(Html.BeginUmbracoForm(“RegisterMember”))

您还可以通过将事件处理程序附加到成员创建的事件来实现这一点

这将允许您使用随Umbraco提供的注册会员局部视图模板

实例
使用Umbraco.Core;
使用Umbraco.Core.Events;
使用Umbraco.Core.Models;
使用Umbraco.Core.Services;
命名空间YourApp.EventHandlers
{
公共类成员注册EventHandler:ApplicationEventHandler
{
受保护的覆盖无效应用程序已启动(UmbracoApplicationBase、umbracoApplication、ApplicationContext ApplicationContext)
{
MemberService.Created+=MemberService\u Created;
}
已创建私有无效成员服务(IMemberService发送方,NewEventArgs e)
{
//始终将用户添加到“主客户端”组
sender.AssignRole(e.Entity.Username,“主客户”);
}
}
}
注意:如果使用较旧版本的Umbraco,则可能需要添加
sender.Save(e.Entity)


您还可以通过将事件处理程序附加到成员创建的事件来实现这一点

这将允许您使用随Umbraco提供的注册会员局部视图模板

实例
使用Umbraco.Core;
使用Umbraco.Core.Events;
使用Umbraco.Core.Models;
使用Umbraco.Core.Services;
命名空间YourApp.EventHandlers
{
公共类成员注册EventHandler:ApplicationEventHandler
{
普罗泰克