2015-01-20 3 views
1

В моем проекте у меня есть модель, которая имеет свойство string, которое содержит контент со стандартами бритвы. Мне нужно скомпилировать свойство для отображения результата html.Как сгенерировать частичные представления из строки в asp.net mvc?

В ViewModel у меня есть код, как следующее:

public class PluginContent{ 
public string Content {private set;get;} 
private void FillContent() { 
Content ="@{int count=10; fore (int i=0;i<count;i++) <b>@i.toString() </b>}"; 
} 
public PluginContent(){ 
FillContent() 
} 
} 

И вид бритвы у меня есть:

@model plugincontent 

<h3>Your content is: </h3> 
@Html.Raw(Model.Content) 

Я думал Html.Raw банки помочь мне, но это не так. Мне нужно отобразить это строковое содержимое, как стандартное частичное представление.

+1

Что реальной проблемой являются вы пытаетесь решить? Почему вы генерируете код Razor в своем контроллере/модели? Почему бы вам не создать частичный вид в первую очередь? Если вы хотите создать разные частичные представления, вы можете использовать '@ Html.Partial' с именем вида. Если вы хотите создать различные компоненты MVC, вы можете использовать '@ Html.Display'. MVC поддерживает композицию из коробки. –

+0

@PanagiotisKanavos, мой главный сценарий большой, я хочу получить и показать html-коды из метода или свойства, которое находится в плагине (не в основном проекте). этот плагин получает представление из встроенных ресурсов сборки и возвращает его как строку. Я не хочу создавать контроллер в плагине для получения небольших результатов. Я могу отправить imodule (который является интерфейсом для моих плагинов) с viewbag или моделью для просмотра, и если я смогу скомпилировать строки для html во время выполнения, мой сценарий будет полностью выполнен. – isaeid

+0

MVC уже имеет аналогичную концепцию, помощники Html. То, как вы пытаетесь это сделать, теперь нарушает архитектуру MVC. Код Razor - это все * виды *. Он не должен генерироваться ViewModel. –

ответ

0

Я не знаю, как правильно выполнять то, что вы ищете. То, что я сделал бы в подобной ситуации, это написать метод, который возвращает требуемый HTML (вместо Razor для генерации HTML) и вызывает это из представления.

Что-то вроде:

public IHtmlString Content() 
{ 
StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < count; i++) 
{ 
sb.Append("<b>"); 
sb.Append(i.ToString()); 
sb.Append("</b>");  
} 

    return new MvcHtmlString(sb.ToString()); 
} 

Если вы действительно хотите иметь бритву, чтобы генерировать HTML посмотреть на что-то вроде

+0

OP спрашивает, как отображать строку содержимого, а не как ее генерировать. Во всяком случае, ASP.NET MVC уже поддерживает частичные представления. В Razor вам просто нужно ввести '@ Html.Partial (...)' –

+0

Это не мой ответ, мне нужен способ скомпилировать мою строку во время выполнения, например, метод eval в javascript. – isaeid

+0

Библиотеки, на которые я указывал, позволяют вам скомпилировать ваши строки во время выполнения. Например (из RazorTemplates README): 'var template = Template.Compile (« Hello @ Model.Name! »); Console.WriteLine (template.Render (new {Name = "World"})); ' –

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