Я только начал играть с WebPages (Razor) и понял некоторые основные концепции за стеной. Прежде всего, я перечисляю то, что мне всегда нужно для каждого сайта, который я создаю:
- Дружественные URL-адреса, конечно (веб-страницы делают это за меня)
- Переведенные URL-адреса (веб-страницы поддерживают параметры, поэтому ими легко управлять)
- Поддержка нескольких шаблонов (веб-страницы не поддерживаются по умолчанию, здесь требуется некоторая логика)
- Отдельный код для каждой функции, чтобы избежать дублирования (WebPages поддерживает его за стеной)
Итак, если вы думаете о приведенном выше списке, в игру вступает старый добрый шаблон MVC. В ASP.NET уже есть инфраструктура MVC(3), которая предоставляет все необходимые мне функции. Я это хорошо знаю. В этом вопросе я пытаюсь выяснить, будет ли технология WebPages также идеальной платформой для разработки крупномасштабных MVC-подобных веб-проектов.
Я проверил поведение загрузки страницы/цепочку веб-страниц и выяснил, что это действительно цепочка, построенная из загруженной страницы и одного или нескольких вложенных макетов. Каждая страница макета имеет указатель на свою загрузочную (родительскую) страницу.
На этом этапе мне нужно прояснить некоторые основные понятия. Поскольку веб-страницы разрешают URL-адреса по физическим файлам и папкам (путям), переведенные URL-адреса косвенно поддерживаются, потому что я могу создавать переведенные папки и файлы, используя такие пути: ..../en/account/register, и я могу создать другой путь, например, венгерский язык путь: .../hu/szemelyes/regisztracio.
Все, что мне нужно, это разделить код, потому что не так элегантно записывать логику регистрации в оба файла .cshtml. WebPages поддерживает @helpers и @functions, поэтому легко создать «Account.cshtml» и создать все необходимые мне функции. Это официальный ответ на мой вопрос.
Что произойдет за стеной, если я напишу @function в каком-нибудь .cshtml (вспомогательном) файле? Он создает для меня новый класс, который наследует WebPageHelper. Я думаю, что это не слишком элегантный способ, поскольку я могу создать свой собственный класс для обеспечения той же функциональности.
В ходе дальнейших исследований я обнаружил, что каждая страница (и страница макета) по умолчанию наследует класс WebPage. С помощью директивы @inherits я могу переопределить наследование по умолчанию и идеальный способ создать свой собственный класс, производный от WebPage, и во всем моем файле .cshtml я могу напрямую наследовать от этой страницы.
На данный момент я могу разделить код (я думаю:) более элегантным способом, чем использование @functions. А как насчет текстовых переводов? Я думаю, что это общий способ использования файлов ресурсов, но с веб-страницами я думаю хранить текстовые значения в простых файлах .cshtml. Что вы думаете об этом?
Наконец, мой register.cshtml:
@inherits Account.Register
@{
Title = "Please Register"
}
..и мой файл regisztracio.cshtml:
@inherits Account.Register
@{
Title = "Kérem regisztráljon"
}
Мой класс Account.Register имеет свойство String Title:
public class Register : WebPage
{
public String Title { get; set; }
...
}
Есть еще одна вещь, которую я должен сказать. Мой файл register.cshtml (как и файл regisztracio.cshtml) не содержит HTML-разметки. У меня есть файл макета по умолчанию (_Master.cshtml), и у меня есть другие файлы макета для каждой страницы (_Register.cshtml) в моем каталоге «Просмотр». Мой код автоматически загружает правильный файл макета страницы по имени моего загруженного класса «контроллер». Таким образом, мой класс Register автоматически загружает файл макета «_Register.cshtml». И все файлы макетов страниц автоматически загружают _Master.cshtml (или _Mobile.cshtml, если посетитель использует мобильное устройство), который является основным макетом.
Итак, я думаю, что это шаблон MVC, реализованный для технологии WebPages, при этом сохраняя сильные функциональные возможности WebPages, такие как автоматическое разрешение URL-адресов.
Что вы думаете?
Так что это моя основная концепция с веб-страницами