Orchard: Пользовательские поля регистрации
Для моего проекта Orchard мне нужна дополнительная информация от пользователя во время регистрации. (Скажите, Имя, Фамилия, Цвет Штанов). Эта информация должна быть введена при регистрации и не может быть отложена до более позднего времени (согласно распоряжениям клиента).
Я пытался использовать плагины "Профиль" и "Расширенная регистрация", чтобы запросить их, но, насколько я вижу, это дает мне только дополнительные поля для отображения в форме регистрации. Есть ли способ представить поля, которые являются обязательными?
У меня также была быстрая попытка переписать AccountController's Register
метод, согласно этому обсуждению, но я не мог заставить его работать: контроллер находится в другом месте, он не может быть разделен на подклассы, и даже если я заставлю его, код никогда не будет выполнен. Я предполагаю, что они используют гораздо более старую версию Orchard.
Итак, в каком направлении мне следует создать обязательное поле, близкое к философии Орчард? Должен ли я создать новый тип поля, который может отклонить пустые значения, может быть? (это вообще возможно)?
2 ответа
Я написал модуль ExtendedRegistration из-за той же необходимости. Вам необходимо создать собственную деталь, например: MyRegistrationPart. Затем вы добавляете эту часть в User ContentType. Со своей стороны просто добавьте атрибут [Обязательный] (аннотации данных) к любым обязательным свойствам. Регистрация не будет успешной, пока эти обязательные значения не будут заполнены!
Надеюсь, теперь все ясно.
Хотя это, вероятно, не ответит на ваш вопрос, я просто хотел указать, что, насколько я понимаю, вам не нужно переопределять / создавать подкласс класса 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())
}
};
}
}