我使用默认的开箱即用实现对此进行了测试,GetViewPage 从文件系统中检索视图没有问题。
我将 RazorFormat 的 VirtualFileSource 换成了 inmemory 的:
Plugins.Add(new RazorFormat() {
VirtualFileSources = new InMemoryVirtualPathProvider(this),
});
在服务中,如果它不存在,我正在编写一个视图:
var helloView = razor.GetViewPage(email.BlastId.ToString());
if (helloView==null)
{
((InMemoryVirtualPathProvider)razor.VirtualFileSources)
.WriteFile("~/views/"+email.BlastId + ".cshtml", email.Blast);
// .WriteFile(email.BlastId + ".cshtml", email.Blast); doesn't work
}
helloView = razor.GetViewPage(email.BlastId.ToString());
//helloView is always null
我已经确认 RazorFormat 的 VirtualFileSource 有该文件,GetViewPage 只是没有检索它。
位于 VirtualFileSource 中的文件的屏幕截图:https ://db.tt/8oirKd9Msi
此外,这返回 true:razor.VirtualFileSources.FileExists("~/views/"+email.BlastId + ".cshtml")
我在没有视图文件夹/等的情况下尝试过它。它似乎没有影响。