Umbraco 会员 - 如何在注册表中保存自定义属性?
Umbraco Member - How to save custom properties in registration form?
我想在我的 Umbraco 网站上注册新成员,并授予他们访问保留区域的权限。
我需要从他们那里收集一些附加信息,比如他们的名字、姓氏、公司名称、phone号码等
因此,对于 后端 ,在我的 Umbraco 网站的会员部分,我这样做了:
- 创建了一个新的 MemberType,名为 "memberWebsite"
- 向我的 "memberWebsite" MemberType
添加了一个新标签 "Additional Infos"
- 在新选项卡中,我添加了新的自定义属性:名字、姓氏、公司名称等
- 所有这些属性都有 "Textstring" 编辑器
- 所有这些属性都有复选框 "Member can edit" 和 "Show on member profile" 选中
对于前端,我为新会员的注册表创建了一个新的局部视图,使用"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 中定义的属性的别名不匹配。
通过此修复,别名匹配和属性值会正确保存在创建的新成员上。
我想在我的 Umbraco 网站上注册新成员,并授予他们访问保留区域的权限。
我需要从他们那里收集一些附加信息,比如他们的名字、姓氏、公司名称、phone号码等
因此,对于 后端 ,在我的 Umbraco 网站的会员部分,我这样做了:
- 创建了一个新的 MemberType,名为 "memberWebsite"
- 向我的 "memberWebsite" MemberType 添加了一个新标签 "Additional Infos"
- 在新选项卡中,我添加了新的自定义属性:名字、姓氏、公司名称等
- 所有这些属性都有 "Textstring" 编辑器
- 所有这些属性都有复选框 "Member can edit" 和 "Show on member profile" 选中
对于前端,我为新会员的注册表创建了一个新的局部视图,使用"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 中定义的属性的别名不匹配。
通过此修复,别名匹配和属性值会正确保存在创建的新成员上。