2015-11-06 3 views
2

У меня есть пользовательское поле в Sitecore - составное поле с числом и богатым текстовым редактором.С Sitecore, как я могу использовать файл cshtml и модель для создания настраиваемого поля?

Редакционная сторона отлично работает, но когда поле отображается без редактора страниц, я хотел бы делегировать его форматирование в файл cshtml - отправив объект по своему выбору в качестве модели.

я могу перехватить рендеринга в DoRender:

protected override void DoRender(HtmlTextWriter output) 
    { 
     if (!Sitecore.Context.PageMode.IsPageEditor) 
     { 
      //here is where I want to delegate the output to a cshtml DisplayTemplate with the Value as the Model. 
     } 
     else 
     { 
      base.DoRender(output); 
     } 
    } 

Но как делегировать вывод в cshtml DisplayTemplate со значением в качестве модели?

ответ

2

Вам нужно будет отобразить представление на строку, затем вы можете использовать это с помощью HtmlTextWriter для визуализации.

Это сделает вид на строку:

public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() }; 

    viewPage.ViewData = new ViewDataDictionary(viewData); 
    viewPage.Controls.Add(viewPage.LoadControl(controlName)); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      viewPage.RenderControl(tw); 
     } 
    } 
    return sb.ToString(); 
} 

Затем вы можете изменить свой код так:

protected override void DoRender(HtmlTextWriter output) 
{ 
    if (!Sitecore.Context.PageMode.IsPageEditor) 
    { 
     //here is where I want to delegate the output to a cshtml DisplayTemplate with the Value as the Model. 
     var model = new {}; // create your model 
     var viewString = RenderPartialToString("~/path/to/view.cshtml", model); 
     output.Write(viewString); 
    } 
    else 
    { 
     base.DoRender(output); 
    } 
} 

Обратите внимание, что этот метод обхода Sitecore конвейеров рендеринга при рендеринге .cshtml файл.

Кредит для метода RenderPartialToString - How to Render Partial View into a String

 Смежные вопросы

  • Нет связанных вопросов^_^