asp.net-mvc-3 – 使用多个Web应用程序共享控制器和视图
发布时间:2020-05-23 14:42:12 所属栏目: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 – GridView’GridView1’触发的事件PageIndexChan
- asp.net-mvc-2 – 引用用TextBoxFor()创建的控件ID
- asp.net-mvc – 如何将MEF与ASP.NET MVC 4和ASP.NET Web AP
- asp.net-mvc – MVC DDD:可以将存储库与控制器中的服务一起
- asp.net – web.config中的多个/不同的身份验证设置
- asp.net-mvc-3 – ASP.NET MVC 3:当BeginForm在布局上时生
- asp.net-mvc – 使用Ninject重构依赖注入的ASP.NET MVC代码
- asp.net – 应用程序池和工作进程线程之间的关系是什么?
- asp.net – Razor base type / Templated Razor使用“using
- asp.net-mvc – 防止多个登录
