ASP.NET MVC 5如何使用来自不同类库的View

时间:2015-04-11 14:58:13

标签: c# asp.net-mvc razor

我想知道如何将我的View放在不同的类库中。 My View位于名为Presentation的类库中,控制器位于标准的ASP.NET MVC 5 Web应用程序项目中。

我尝试使用下面列出的Custom ViewEngineProvider:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Controllers
{
    public class CustomViewEngine : RazorViewEngine
    {
        public CustomViewEngine() : base()
        {
            ViewLocationFormats = new[] 
            {
                "~/Views/{1}/%1/{0}.cshtml",
                "~/Views/{1}/%1/{0}.vbhtml",
                "~/Views/Shared/{0}.cshtml",
                "~/Views/Shared/{0}.vbhtml"
            };

            PartialViewLocationFormats = new[] 
            {
                "~/Views/%1/{1}/{0}.cshtml",
                "~/Views/%1/{1}/{0}.vbhtml",
                "~/Views/Shared/{0}.cshtml",
                "~/Views/Shared/{0}.vbhtml"
            };
        }

        protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
        {
            return base.CreatePartialView(controllerContext, partialPath);
        }

        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
        {
            return base.CreateView(controllerContext, viewPath, masterPath);
        }

        protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
        {
            return base.FileExists(controllerContext, virtualPath);
        }

    }
}7

但这不起作用。 我读到了关于VirtualPathProvider的内容,但是我无法弄清楚它是如何工作的以及如何在这种情况下使用它,如果它可以解决我的问题。

日Thnx

1 个答案:

答案 0 :(得分:2)

问题是视图不会编译到类库中,因为它们是静态文件,因此您无法添加对包含视图的项目的引用。

当您将模型,视图和控制器移动到单独的项目时 - 通常模型和控制器分离,视图保留在ASP.NET MVC项目中。

但是如果您想保持现状,那么您可以将构建事件添加到项目中,并将视图从一个项目复制到另一个项目。

或者你可以使用RazorGenerator来编译视图。