我们正在开发 3 个 asp mvc 应用程序,它们都需要一些相同的共享编辑器和显示模板视图。与其在所有 3 个项目中复制/粘贴这些,是否有可能以某种方式将它们放在共享组件中并以某种方式在所有应用程序中引用它们?
问问题
760 次
3 回答
1
ViewEngine
如果要从 Views 文件夹以外的位置获取视图,则需要创建自己的视图。
public class CustomViewEngine : WebFormViewEngine {
public CustomViewEngine() : base() {
MasterLocationFormats = new[] {
"/YourFolder/{1}/{0}.master",
"/YourFolder/Shared/{0}.master"
};
ViewLocationFormats = new[] {
"/YourFolder/{1}/{0}.aspx",
"/YourFolder/{1}/{0}.ascx",
"/YourFolder/Shared/{0}.aspx",
"/YourFolder/Shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}
//Override the FindView method to implement your own logic
public override ViewEngineResult FindView(
ControllerContext controllerContext, string viewName,
string masterName, bool useCache)
return base.FindView(controllerContext, viewName, masterName, useCache);
}
}
然后在以下位置注册您ViewEngine
的Global.asax
:
protected void Application_Start() {
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomViewEngine());
}
此外,这篇文章可能会有所帮助。(可惜底部的下载链接坏了)
编辑:这个解决方案似乎在实践中不起作用,因为 ASP.NET 不允许从应用程序目录之外加载内容(参见Eilon的评论)。
但是上面的链接,将视图存储在数据库中,仍然会有所帮助。
于 2010-01-04T07:29:49.763 回答
1
我不确定它是如何完成的,但必须有一种方法可以在 DLL 中编译页面并共享库。
但是,如果您负担得起使用自定义视图引擎和另一个模板系统(例如 Stringtemplate),那么您可以像共享库一样共享视图:
- 创建类库项目
- 照常创建模板并将它们标记为“嵌入式资源”。这将确保它们被放入库的 DLL 中
- 编写您的自定义视图引擎以从程序集 (DLL) 中提取模板。一个好的开始可能是编辑/分叉现有的:http ://code.google.com/p/string-template-view-engine-mvc/source/browse/trunk/StringTemplateViewEngine/StringTemplateViewEngine.cs
- 然后在您的 ASP.NET MVC 项目中注册您的视图引擎
于 2010-01-11T23:01:48.560 回答
0
要在多个 ASP.NET 应用程序之间共享用户控件(或几乎任何内容),您可以使用此处列出的技巧:http: //aspadvice.com/blogs/ssmith/archive/2006/10/05/Tip_3A00_-Share-User- ASP.NET.aspx 中的应用程序之间的控件
基本思想是将 ASCX 文件放在一个文件夹中,并将该文件夹放入其他应用程序的虚拟文件夹中(您可以有多个虚拟文件夹指向同一个物理文件夹)。
于 2010-01-05T01:35:30.047 回答