asp.net-mvc-3 – 使用多个Web应用程序共享控制器和视图
发布时间:2020-12-15 18:30:48 所属栏目:asp.Net 来源:网络整理
导读:我想将我的控制器和视图分解成不同的类库,以便可以在多个ASP.NET MVC 3应用程序中重用。使用单独的程序集时,控制器部分不是问题,而是让视图引擎找到视图。 我最终使用了Compile your asp.net mvc Razor views into a seperate dll。 有没有更容易的方式我
我想将我的控制器和视图分解成不同的类库,以便可以在多个ASP.NET MVC 3应用程序中重用。使用单独的程序集时,控制器部分不是问题,而是让视图引擎找到视图。
我最终使用了Compile your asp.net mvc Razor views into a seperate dll。 有没有更容易的方式我错过了? 解决方法
我修改了发布
here的想法,与MVC3一起工作。这是非常快速和容易。唯一的缺点是共享视图需要嵌入资源,因此编译。
将您的共享视图(.cshtml,.vbhtml文件)放入库项目中。 (我也在这个项目中有一些共享控制器。)如果要使用应用程序中的_Layout.cshtml,请确保包含指向它的_ViewStart.cshtml与您的共享视图。 。 public class EmbeddedResourceViewEngine : RazorViewEngine { public EmbeddedResourceViewEngine() { ViewLocationFormats = new[] { "~/Views/{1}/{0}.aspx","~/Views/{1}/{0}.ascx","~/Views/Shared/{0}.aspx","~/Views/Shared/{0}.ascx","~/Views/{1}/{0}.cshtml","~/Views/{1}/{0}.vbhtml","~/Views/Shared/{0}.cshtml","~/Views/Shared/{0}.vbhtml","~/tmp/Views/{0}.cshtml","~/tmp/Views/{0}.vbhtml" }; PartialViewLocationFormats = ViewLocationFormats; DumpOutViews(); } private static void DumpOutViews() { IEnumerable<string> resources = typeof(EmbeddedResourceViewEngine).Assembly.GetManifestResourceNames().Where(name => name.EndsWith(".cshtml")); foreach (string res in resources) { DumpOutView(res); } } private static void DumpOutView(string res) { string rootPath = HttpContext.Current.Server.MapPath("~/tmp/Views/"); if (!Directory.Exists(rootPath)) { Directory.CreateDirectory(rootPath); } Stream resStream = typeof(EmbeddedResourceViewEngine).Assembly.GetManifestResourceStream(res); int lastSeparatorIdx = res.LastIndexOf('.'); string extension = res.Substring(lastSeparatorIdx + 1); res = res.Substring(0,lastSeparatorIdx); lastSeparatorIdx = res.LastIndexOf('.'); string fileName = res.Substring(lastSeparatorIdx + 1); Util.SaveStreamToFile(rootPath + fileName + "." + extension,resStream); } } 我正在使用Adrian的StreamToFile作者,发现here。 >在您的应用程序的Global.asax.cs中添加: 。 public static void RegisterCustomViewEngines(ViewEngineCollection viewEngines) { //viewEngines.Clear(); //This seemed like a bad idea to me. viewEngines.Add(new EmbeddedResourceViewEngine()); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); RegisterCustomViewEngines(ViewEngines.Engines); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-web-api – 如何在Web Api调用期间获取用户上下文?
- asp.net-mvc-3 – RemoteAttribute验证器不会触发服务器端
- asp.net – 如何在使用System.Web.Optimization时将type =“
- 将ASP.NET Web窗体托管为Windows Azure网站
- asp.net-mvc – 防止在ASP.NET MVC中缓存属性,每次执行一个
- asp.net – 获取Telerik RadScheduler当前视图的日期范围
- asp-classic – 经典的ASP gremlims,每当使用HTML特殊字符时
- 经典的ASP脚本超时
- asp.net-mvc-3 – 使用.SetValidator()时,FluentValidation
- asp.net-mvc-2 – 覆盖“Html.EditorFor”上的类
推荐文章
站长推荐
- asp.net-mvc – 使用MVC将数据导入局部视图或布局
- 实现ASP.NET MVC应用程序的全文搜索的最佳方法是
- asp.net – 来自TextBox的ActionLink routeValue
- 在ASP.NET中如何知道当前路径是否是安全路径
- asp.net-mvc-4 – 检查组是否为空SignalR?
- asp-classic – 如何在asp页面中以编程方式301重
- asp.net-mvc – 动作命名约定
- asp.net-mvc – .net Mvc 3 Ajax.BeginForm,获取
- entity-framework-6 – Entity Framework种子方法
- asp.net – jQuery flot,来自SQL Server的Live p
热点阅读