2013-12-20 2 views
3

Есть ли какая-либо аннотация, эквивалентная @Html.Raw(Model.Property) в ViewModel?HTML.Raw эквивалент DataAnnotation в ViewModel

Я пытаюсь использовать [DisplayFormat(HtmlEncode=false)] без каких-либо успехов в создании тегов HTML (<b>, <span>), вместо этого отображая его как текст.

+1

Дело в том, что любая аннотация все равно потребует обертки вокруг значения, обычно 'Html.DisplayFor'. Итак, теперь вы печатаете '@ Html.DisplayFor (m => m.Property)' вместо '@ Html.Raw (Model.Property)'. Если ваша цель заключается в сохранении набора текста, это не поможет вам. Единственное решение, которое поможет, это @ m0sa просто потому, что вы могли бы просто написать '@ Model.Property' –

+0

Не сохранять ввод текста, но (не могу объяснить, почему именно) почему-то я вижу' @ Html.DisplayFor (m => m. Свойство) 'более чистым или« нормально », чем' @ Html.Raw() '. –

ответ

3

Вы можете использовать UIHint сделать это путем создания шаблона Views\Shared\DisplayTemplates\Html.cshtml с этим внутри:

@model string 
@Html.Raw(Model) 

Тогда на модели:

[UIHint("Html")] 
public string MyHtml {get; set;} 

Это может затем быть выведена во всех других видны как:

+0

В моем случае я не вижу, как UIHint w/Html.Raw приходит к решению, где только с использованием Html.Raw работает (я хочу оставить .cshtml немного чище от помощников, переместив formattings в ViewModel, насколько это возможно). –

+0

IMO, я предпочитаю делать это вот так. Я только закончил с одним файлом html.cshtml в представлениях \ Shared \ DisplayTemplates \, и я упростил свою модель, указав только UIHint, во всех других представлениях мне не нужно делать @ Html.Raw. – hutchonoid

+1

Ах! очень нравится! Я не понял это с первого взгляда. @ Html.Raw будет помещен в шаблон, я думал, что он находится на .cshtml. Думаю, я не проснулся сегодня утром. –

2

Сделайте объект IHtmlString (вы можете использовать реализацию MvcHtmlString) вместо string.

public class MyModel 
{ 
    public IHtmlString Property { get; private set; } 
    public MyModel(string property) 
    { 
      Property = new MvcHtmlString(property); 
    } 
} 
+0

Это хорошо, но я не хочу создавать новое свойство, чтобы избежать @ Html.Raw, я так не ненавижу его. хе-хе! –

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