RazorEngine (вне MVC) - можно зарегистрировать шаблоны без явного указания типа модели? - PullRequest
3 голосов
/ 10 мая 2011

Можно ли зарегистрировать шаблоны без указания типа модели?

В настоящее время работает так (взято из: документация ):

//Code to get template string from file xxx.cshtml into template variable
Razor.Compile(template, typeof(SomeModel), "complex");

Однако я хотел бы предварительно скомпилировать шаблоны, используя определение типа модели из директивы @model или @inherits в представлении. Это возможно?

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Razor.Compile не требует указания типа модели при компиляции.

public class ActualType { public string Firstname {get;set;}}

Razor.Compile("@Model.Firstname", "outputname");
Razor.Run<ActualType>(model, "outputname");

Должно быть хорошо для вас.

Объявление @model еще не доступно. В настоящее время есть патч для него на странице списка патчей (http://razorengine.codeplex.com/SourceControl/list/patches), однако он добавляет только поддержку времени разработки, а не время выполнения. Текущая причина этого заключается в том, что MVC RazorEngine уже делает это, и мы не хотели путаницы относительно того, является ли этот механизм бритвы тем же, что и реализация бритвы MVC (многие считают, что)

Мы рассчитываем реализовать его для v2.2, когда у нас обоих будет время поработать над ним.

Пока модель, которую вы передаете, соответствует требуемым параметрам, используемым шаблоном, вам может пригодиться.

На самом деле не должно быть слишком сложно изменить патч, чтобы заставить шаблон использовать объявление @model, поскольку оно template<t>. Я мог бы работать над этим сегодня вечером, возможно, если это серьезное требование. Мне любопытно, почему вы не хотите включать его в объявление компиляции, если вы не беспокоитесь о смене моделей или не знаете модель заранее ... но в конце вы всегда знаете тип перед вами передать его.

0 голосов
/ 10 мая 2011

Глядя на источник, да.

Параметр modelType указывает тип по умолчанию , а сам по умолчанию равен dynamic, если не указан.

Однако,если представление явно указывает свой базовый тип, это должно переопределить его.

Обратите внимание, что я не пробовал это;Я просто вывод из источника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...