2017-02-08 9 views
3
string template = "Hello @Model.Name, welcome to RazorEngine!"; 
var result = Engine.Razor.RunCompile(template, "templateKey", null, new { Name = "World" }); 

Теперь я обновляю свой существующий шаблон, как показано ниже. Я получаю свой шаблон из базы данных.Как запустить компилятор на обновленном шаблоне, используя тот же ключ в RazorEngine?

string template = "Hello @Model.Name, welcome to My World!"; 

Всякий раз, когда я делаю что я получаю сообщение об ошибке тот же ключ уже используется для другого шаблона.

Каков наилучший способ устранить эту проблему?

+0

Каждый шаблон должен иметь свой собственный уникальный ключ. Проверьте, был ли шаблон уже использован с «Engine.Razor.IsTemplateCached» и использовать «Run» вместо «RunCompile», если он уже существует. – DavidG

+0

@DavidG Было бы здорово, если бы вы могли привести пример. – dev

ответ

2

Проблема заключается в том, что вы не используете ключ шаблона, который является уникальным для кода шаблона, который вы передаете. RazorEngine кэширует шаблоны и компилирует их, поэтому в следующий раз он быстрее запускается.

var helloTemplate = "Hello @Model.Name"; 

string result; 
var model = new { Name = "World" }; 

//Has the template already been used? If so, Run without compilation is faster 
if(Engine.Razor.IsTemplateCached("helloTemplate", null)) 
{ 
    result = Engine.Razor.Run("helloTemplate", null, model); 
} 
else 
{ 
    result = Engine.Razor.RunCompile(helloTemplate, "helloTemplate", null, model); 
} 
+0

, даже если я обновляю шаблон. Он по-прежнему использует шаблон кэша, когда я запускаю его во второй раз. Я использую LINQPad 4 для тестирования этой проблемы. – dev

+0

Если вы обновите шаблон, вам понадобится новый ключ - это другой шаблон. Невозможно очистить кеш в «RazorEngine», поскольку они скомпилированы в виде сборок, и невозможно выгрузить сборку. вы можете обойти это, используя новый экземпляр двигателя: 'var engine = RazorEngineService.Create(); engine.RunCompile (...); 'но это не освободит память из предыдущего шаблона. – DavidG

+0

Это означает, что каждый раз, когда я обновляю шаблон, мне нужно создать новый ключ и скомпилировать его снова. Я не могу удалить старый шаблон из кеша. – dev