Umbraco 会员 - 如何在注册表中保存自定义属性?

Umbraco Member - How to save custom properties in registration form?

我想在我的 Umbraco 网站上注册新成员,并授予他们访问保留区域的权限。
我需要从他们那里收集一些附加信息,比如他们的名字、姓氏、公司名称、phone号码等


因此,对于 后端 ,在我的 Umbraco 网站的会员部分,我这样做了:


对于前端,我为新会员的注册表创建了一个新的局部视图,使用"Register Member" Umbraco 提供的片段。


我只更改了 registerModel 的成员类型,指定了我的新 MemberType "memberWebsite",如代码片段评论中所建议的那样。

@*
        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();
var registerModel = Members.CreateRegistrationModel("memberWebsite");

注册页面中正确显示了新成员自定义属性的字段。
我用一些值填充它们,然后单击提交按钮。
我希望在创建的新成员中找到这些值,但只保存了标准字段(例如姓名、电子邮件、密码)。
自定义属性完全空白,就像我从来没有填过一样。

如何使用输入的值正确保存自定义属性?
PS:我是 运行 Umbraco 7.14.0.

您需要指定要填充的成员属性。 请尝试以下操作:

var model = Members.CreateRegistrationModel("memberWebsite");
model.MemberProperties.Add(new UmbracoProperty { Name = "Full name", Alias = "fullName", Value = "Mikkel Johannsen" });

好的,我找到了解决该问题的方法。

"Register Member" 片段中的代码[不工作]

@if (registerModel.MemberProperties != null)
        {
            for (var i = 0; i < registerModel.MemberProperties.Count; i++)
            {
                @Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)

                @Html.EditorFor(m => registerModel.MemberProperties[i].Value)
                @Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
                <br />
            }


        }

我没有通过索引 i 遍历 MemberProperties 数组,而是能够通过一个一个地检索属性来访问它们。我使用了实际的索引号而不是变量 i。

新代码[正在使用]

@if (registerModel.MemberProperties != null)
        {
            // first property
            @Html.LabelFor(m => registerModel.MemberProperties[0].Value, registerModel.MemberProperties[0].Name)

            @Html.EditorFor(m => registerModel.MemberProperties[0].Value)
            @Html.HiddenFor(m => registerModel.MemberProperties[0].Alias)
            <br />

            // second property
            @Html.LabelFor(m => registerModel.MemberProperties[1].Value, registerModel.MemberProperties[1].Name)

            @Html.EditorFor(m => registerModel.MemberProperties[1].Value)
            @Html.HiddenFor(m => registerModel.MemberProperties[1].Alias)
            <br />

            // ... and so on for all the other MemberProperties defined in my MemberType
            }
        }

出于某种原因,for 循环将前缀 "CS$<>8__locals1" 添加到所有属性属性。 注册表单传递的属性的别名与 MemberType 中定义的属性的别名不匹配。

通过此修复,别名匹配和属性值会正确保存在创建的新成员上。