У меня есть следующий код для получения моего cshtml шаблона электронной почты.
try
{
var layoutTemplateKey = new NameOnlyTemplateKey("layout", ResolveType.Global, null);
if (!Engine.Razor.IsTemplateCached(layoutTemplateKey, null))
Engine.Razor.AddTemplate(layoutTemplateKey, ReadTemplateFile("/Views/Email/Layout.cshtml"));
var templateKey = new NameOnlyTemplateKey(templatePath, ResolveType.Global, null);
if (!Engine.Razor.IsTemplateCached(templateKey, viewModel.GetType()))
{
Engine.Razor.AddTemplate(templateKey, ReadTemplateFile(templatePath));
Engine.Razor.Compile(templateKey, viewModel.GetType());
}
return viewModel == null ?
Engine.Razor.Run(templateKey) :
Engine.Razor.Run(templateKey, viewModel.GetType(), viewModel);
}
catch (Exception ex)
{
return ex.Message;
}
Однако My the Engine.Razor.Run вызывает InvalidCastException
с моделью, на которую здесь нет ссылок.
И это постоянно происходит с любыми другими моделями.
Недавнее изменение, которое я сделал, унаследовало каждый из этого класса от другой модели, которая будет использоваться в ожидаемой модели Layout.cshtml
.
.: NewBookRecievedEmailViewModel
public class NewBookRecievedEmailViewModel : EmailHelperModel
{
public ProposalPostedEmailViewModel()
{
this.canBeDeleted = true;
}
public string BookName { get; set; }
public string Author {get; set;}
}
Получает ошибку с моделью PayOutBookEmailViewModel
public class PayOutBookEmailViewModel : EmailHelperModel
{
public string BookID { get; set; }
public string BookUrl {get; set;}
}
И унаследованная модель: EmailHelper
public class EmailHelperModel
{
public bool canBeDeleted { get; set; }
public string DeleteUrl { get; set; }
}
Трассировка стека:
at RazorEngine.Templating.TemplateBase`1.SetModel(Object model)
at RazorEngine.Templating.TemplateBase.SetData(Object model, DynamicViewBag viewbag)
at RazorEngine.Templating.RazorEngineCore.CreateTemplate(ICompiledTemplate template, Object model, DynamicViewBag viewbag)
at RazorEngine.Templating.RazorEngineCoreWithCache.ResolveInternal(String cacheName, Object model, Type modelType, DynamicViewBag viewbag, ResolveType resolveType, ITemplateKey context)
at RazorEngine.Templating.InternalTemplateService.Resolve(String name, Object model, Type modelType, DynamicViewBag viewbag, ResolveType resolveType)
at RazorEngine.Templating.TemplateBase`1.ResolveLayout(String name)
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass22_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, ITemplateKey key, Type modelType, Object model, DynamicViewBag viewBag)
at Pxp.Api.Helpers.EmailHelper.GetHtmlContent(String templatePath, Object viewModel)