具有自定义页面扩展名的自定义ViewEngine

时间:2013-02-11 13:20:26

标签: asp.net-mvc

我创建了一个自定义View Engine来处理移动请求。这些视图必须具有“.mobile”扩展名,并且必须放在/ ViewsMobile根文件夹下:

public class MobileViewEngine : RazorViewEngine
    {
        public MobileViewEngine()
        {
            MasterLocationFormats = new string[] { "~/ViewsMobile/Shared/{0}.mobile" };
            ViewLocationFormats = new string[] { "~/ViewsMobile/{1}/{0}.mobile", "~/ViewsMobile/Shared/{0}.mobile" };
            PartialViewLocationFormats = new string[] { "~/ViewsMobile/Widgets/{1}/{0}.mobile" };
            FileExtensions = new string[] { "mobile" };
        }
        public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
        {
            ViewEngineResult result = null;
            var request = controllerContext.HttpContext.Request;

            if (request.Browser.IsMobileDevice)
            {
               result = base.FindView(controllerContext, viewName, masterName, false);
            }
            return null;
        }
    }

我在Application_Start事件中的位置0(成为顶级引擎)的ViewEngines.Engines中插入了此ViewEngine。

ViewEngines.Engines.Insert(0, new MobileViewEngine());

我将此行添加到web.config中以识别.mobile扩展名:

 <buildProviders>
        <add extension=".mobile" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
 </buildProviders>

现在,如果我从移动平台访问主页(controller = pages,action = main),我将获得以下异常:

  

无法确定“〜/ ViewsMobile / Pages / Main.mobile”的代码语言。在base.FindView(controllerContext, viewName, masterName, false);

行崩溃

这是堆栈跟踪:

  

[InvalidOperationException:无法确定代码语言   “〜/ ViewsMobile /页/ Main.mobile]   System.Web.WebPages.Razor.WebPageRazorHost.GetCodeLanguage()+ 24401

     

System.Web.WebPages.Razor.WebPageRazorHost..ctor(String virtualPath,   String physicalPath)+136

     

System.Web.Mvc.MvcWebRazorHostFactory.CreateHost(String virtualPath,   String physicalPath)+43 ....

你知道我如何为我的观点使用自定义扩展程序,如“.mobile”,并在每个内部使用Razor吗?

提前致谢。

亲切的问候。

何。

0 个答案:

没有答案