Razor - Рендеринг без Render () и без Кодирования - PullRequest
5 голосов
/ 21 июля 2011

Может кто-нибудь объяснить, как достигается следующее.Компонент Telerik Grid будет генерировать некодированный HTML со следующим кодом:

@(Html.Telerik().Grid(Model)
        .Name("Grid")
        .DataKeys(keys => keys.Add(c => c.ProductID))
        .DataBinding(dataBinding => dataBinding.Server()
            .Select("ColumnSettings", "Grid")
            .Update("ColumnSettings_Save", "Grid")
            .Delete("ColumnSettings_Delete", "Grid"))
        .Columns(columns =>columns.LoadSettings((IEnumerable<GridColumnSettings>)ViewData["Columns"]))
        .Sortable()
)

Предположительно, это происходит потому, что вызов метода заключен в "@ (....)".Всякий раз, когда я пытаюсь сделать это с моими собственными компонентами, результат кодируется HTML.Я знаю, что могу использовать Render () для вывода MvcHtmlString, и тогда мой Html не кодируется, но сетка Telerik, кажется, достигает этого без .Render ().

Может кто-нибудь объяснить мне секрет?

1 Ответ

3 голосов
/ 16 сентября 2011

Синтаксис @ () позволяет этой команде занимать несколько строк (в противном случае разрыв строки будет интерпретирован - неправильно - как конец оператора) и не влияет на кодировку.

Выправильно - они выводят MvcHtmlString, которая избегает автоматической кодировки Razor.

Более конкретно, все эти методы являются частью объекта Builder, свободного интерфейса, который возвращает себя при каждом вызове.Сам Builder реализует IHtmlString , поэтому вызов .Sortable () или любой другой вызов в этой цепочке приведут к кодированию HTML без кода.

...