渲染视图(或部分)在另一个项目中?

时间:2009-04-25 23:18:49

标签: asp.net-mvc path view render partial

我有一个包含以下两个项目的解决方案 - MyNamespace.Services和MyNamespace.Web。

Web包含MVC Web应用程序。

在服务项目中,我有一个EmailService类,负责向用户发送电子邮件。

我想对电子邮件模板使用部分或视图(ascx或aspx)。 我找到了几个关于如何呈现局部视图并将结果作为字符串获取的解决方案,如果模板位于Web项目中(因为它是调用电子邮件服务的Web项目中的控制器),该工作正常。

(我尝试使用的两种方法是http://developersisland.blogspot.com/2009/01/renderpartial-to-string-in-aspnet-mvc.html(位于博客底部)或http://www.brightmix.com/blog/how-to-renderpartial-to-string-in-asp-net-mvc/

但我的电子邮件模板位于服务项目中。

如何从Web项目内部修改我的服务项目中的模板路径(部分/视图),它与LoadControl或RenderPartial一起使用,它们都将虚拟路径作为参数?

似乎无论我做什么,根目录都设置为Web项目目录。

有可能吗?

能够以某种方式独立于Web项目工作会很高兴。

4 个答案:

答案 0 :(得分:2)

如果不开发自己的视图引擎,我认为这是不可能的。默认视图引擎仅查看部分视图的某些位置 - 包括当前视图文件夹和共享视图文件夹。我认为您不能在当前项目之外搜索视图,因为这些视图未在视图引擎中注册。

答案 1 :(得分:2)

您可以考虑创建HTML帮助程序来呈现电子邮件并将其作为字符串返回。

无论是部分视图还是使用HTML返回字符串的方法都无关紧要。我实际上认为对你的情况来说,辅助方法是一个更好的选择。

简单的辅助方法在使用方式上也更加灵活。

答案 2 :(得分:1)

您可以尝试创建自定义视图引擎定位器或虚拟路径提供程序。以下是一些可以帮助您实现目标的示例:

答案 3 :(得分:1)

上面的所有链接都很好,这也可能有所帮助。你一定能够找到并使用这些观点。我遇到的问题是与他们合作,其他项目中没有代码完成等。通过摆弄项目文件也可以实现这一目标,但说实话,我最终选择了上面的分组解决方案

Plug in architecture for ASP.NET MVC