У меня есть вопрос, который я немного боролся с последними днями. Я пытаюсь понять, как работает рендеринг блоков в Episerver 7 при работе с MVC.
Моя текущая установка, которая действительно работает, выглядит следующим образом:
Я создал тип блока под названием «TeaserBlock», который имеет несколько свойств:
[ContentType(DisplayName = "TeaserBlock", GUID = "571582c4-6b99-4c0a-b000-f62265e312a9", Description = "A Teaser Block for show!")]
public class TeaserBlock : BlockData
{
[Display( GroupName = SystemTabNames.Content, Order = 1)]
public virtual string TeaserHeading { get; set; }
[Display(GroupName = SystemTabNames.Content, Order = 2)]
public virtual string TeaserText { get; set; }
}
Для этого у меня есть соответствующее частичное представление в Views/Shared/ под названием TeaserBlock.cshtml. Я думаю, этот блок отображает блок в режиме просмотра?
Моя самая большая проблема заключалась в том, чтобы заставить работать «редактирование на странице», и после некоторых попыток и поиска в Google я наконец заставил его работать со следующим кодом:
[TemplateDescriptor(Inherited = true,
Tags = new string[] { RenderingTags.Preview },
TemplateTypeCategory = TemplateTypeCategories.MvcController)]
public class PreviewBlockController : ActionControllerBase, IRenderTemplate<BlockData>
{
public ActionResult Index(BlockData currentBlock)
{
return View(currentBlock);
}
}
После того, как я добавил соответствующее представление в PreviewBlockController, он работал в режиме «редактирование на странице», что было хорошо. Мне потребовалось довольно много времени, прежде чем я понял, что если строки «TemplateTypeCategory = TemplateTypeCategories.MvcController)» там нет, это не сработает. Кто-нибудь знает, зачем нужна эта строка?
Также есть ли какая-то магия при использовании тега «RenderingTags.Preview»?
Допустим, у меня есть 5 разных блоков в моем приложении. Нужны ли мне 5 разных контроллеров предварительного просмотра и соответствующие им представления?
Я хотел бы иметь более общий «контроллер предварительного просмотра блоков», который мог бы обрабатывать все «редактирование на странице» для моих блоков. Однако я не уверен, возможно ли это, потому что все блоки будут иметь разные свойства и, следовательно, нуждаются в отдельных .cshtml для их предварительного просмотра, если предварительный просмотр будет иметь какое-либо значение, я думаю. Или у меня есть какой-то способ в коде узнать, какие свойства, которые имеют отношение к блоку, отправили его моему контроллеру, чтобы я мог, например, перебрать их? И с помощью этого нужен только один контроллер предварительного просмотра и соответствующий вид?
Есть ли какие-либо рекомендации о том, как справиться с этим наилучшим образом?
Надеюсь, кто-нибудь поможет мне немного лучше понять эту концепцию, мне трудно найти информацию о некоторых концепциях, касающихся эписервера.