Orchard: Пользовательские поля регистрации - PullRequest
5 голосов
/ 07 июня 2011

Для моего проекта Orchard мне нужна дополнительная информация от пользователя во время регистрации.(Скажите, Имя, Фамилия, Цвет Штанов).Эта информация должна быть введена при регистрации и не может быть отложена до более поздней даты (в соответствии с заказами клиента).

Я пытался использовать плагины профиля и расширенной регистрации, чтобы запросить их, но, насколько я вижу, это толькодает мне дополнительные поля для отображения в регистрационной форме.Есть ли способ представить поля, которые являются обязательными?

Я также быстро переписал метод Register AccountController согласно этому обсуждению , но я не смог его получитьна работу: контроллер находится в другом месте, он не может быть разделен на подклассы, и даже если я заставлю его, код никогда не будет выполнен.Я предполагаю, что они используют гораздо более старую версию Orchard.

Итак, в каком направлении мне нужно создать обязательное поле, близкое к философии Орчард?Должен ли я создать новый тип поля, который может отклонить пустые значения, может быть?(это вообще возможно)?

Ответы [ 2 ]

6 голосов
/ 09 июня 2011

Я написал модуль ExtendedRegistration из-за той же необходимости.Вам необходимо создать собственную деталь, например: MyRegistrationPart.Затем вы добавляете эту часть в User ContentType.С вашей стороны просто добавьте атрибут [Обязательный] (аннотации данных) к любым обязательным свойствам.Регистрация не будет успешной, пока эти обязательные значения не будут заполнены!

Надеюсь, теперь все ясно.

3 голосов
/ 07 июня 2011

Хотя это, вероятно, не ответит на ваш вопрос, я просто хотел отметить, что, насколько я понимаю, вам не нужно переопределять / создавать подкласс класса AccountController. Вместо этого вам нужно «перезаписать» маршрут Users/Account/Register, добавив свой собственный с более высоким приоритетом. Для этого вам необходимо внедрить IRouteProvider как часть нашего модуля. Так как это IDependency, он будет автоматически загружаться и обрабатываться во время выполнения. Что-то вроде:

public class Routes : IRouteProvider
{
    public void GetRoutes(ICollection<RouteDescriptor> routes)
    {
        routes.AddRange(GetRoutes());
    }

    public IEnumerable<RouteDescriptor> GetRoutes()
    {
        return new[] {
            new RouteDescriptor {
                // Make sure to be higher than the default
                Priority = ##### PRIORITY HERE (int) ######,
                Route = new Route(
                "Users/Account/Register",
                new RouteValueDictionary {
                    {"area", "#### YOUR MODULE AREA HERE ####"},
                    {"controller", "#### YOUR ACCOUNT CONTROLLER HERE ####"},
                    {"action", "#### YOUR REGISTER ACTION HERE ####"}
                },
                new RouteValueDictionary(),
                new RouteValueDictionary {
                    {"area", "#### YOUR MODULE AREA HERE ####"}
                },
                new MvcRouteHandler())
            }
        };
    }
}
...