Umbraco Member - Как сохранить пользовательские свойства в регистрационной форме? - PullRequest
0 голосов
/ 04 июня 2019

Я хочу зарегистрировать новых членов на моем веб-сайте Umbraco и предоставить им доступ к зарезервированной области.Мне нужно получить от них дополнительную информацию , такую ​​как их имя, фамилия, название компании, номер телефона и т. Д.


Итак, для back-end , в разделе Member моего сайта Umbraco, я сделал это:

  • создал новый MemberType под названием "memberWebsite"
  • добавил новую вкладку "Дополнительная информация" в мой "memberWebsite" MemberType
  • внутри новой вкладки я добавил свои новые пользовательские свойства: сначалаИмя, фамилия, название компании и т. Д.
  • все эти свойства имеют установленный редактор «Textstring»
  • . Все эти свойства имеют флажки «Участник может редактировать» и «Показывать в профиле участника»

Для front-end я создал новое частичное представление для регистрационной формы нового участника, используя «Регистрация»Пользовательский фрагмент предоставлен 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.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Хорошо, я нашел обходной путь для этой проблемы.

Код из фрагмента «Зарегистрировать участника» [НЕ РАБОТАЕТ]

@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 />
            }


        }

Вместо циклического перебора массива MemberProperties с индексомя смог получить доступ к свойствам, получив их по одному.Я использовал фактический индекс вместо переменной i.

Новый код [ WORKING ]

@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.

С этим исправлением псевдоним совпадает, а значения свойств корректно сохраняются при создании нового члена.

0 голосов
/ 06 июня 2019

Вам нужно будет указать, какие свойства элемента вы хотите заполнить.Попробуйте следующее:

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