我知道有几个类似的问题可以解决这个话题,但我对答案不满意。
我想要的是充分利用 Razor View 引擎,它可以将强类型视图与布局页面和部分视图一起使用。我想在我的视图顶部声明模型并传入该模型。很简单!没有动态模型需要在将它们传递到视图之前显式构建。编辑:我想在 Web 应用程序之外,在可以构造电子邮件正文的类库中执行此操作。这里真正的问题是使用不是 Web 应用程序的 Razor 视图引擎。
这背后的想法是,如果我有一个User
包含 20 个属性的对象,并且我的第一个版本的欢迎电子邮件仅使用名称,但稍后我想编辑模板以使用他们的City
,State
或Email
地址,那么我希望能够无需添加代码并重新编译和重新部署即可更新 Razor 视图。
我看到RazorEngine,我喜欢这个想法和简单性,但一切都是动态类型。我的问题是我将从数据库中提取数据作为模型。由于必须将事物推入动态类型,我无法在视图上获得所有属性。
我还看到了 MvcMailer,它在理论上也很好,但它也存在同样的问题,即传递到视图中的所有数据模型都是动态的并且不是强类型的。
我已经开始构建我自己的版本,这将需要几个 Web 命名空间,例如 System.Web.Mvc、System.Web.Razor 和 System.Web.WebPages - 我可以接受。问题是缺少 HttpContext 和 ControllerContext 和 RouteData .... 我正在尝试模拟/存根。我目前正在尝试研究 DisplayModes 并弄清楚如何在真实的 Web 环境之外模拟这些。
有没有更好的办法?如果您要建议前面提到的两个框架之一,请注意我的问题并让我知道是否有解决方法。
编辑 2:在使用了 RazorEngine 之后,强类型模型并不一定像我想象的那么严重。我现在只希望能够使用布局页面和部分视图。我可以用被替换的字符串占位符来解决这个问题,但可能不是很有效而且不是很灵活。