正在覆盖MVC 4.0 ViewEngine



我希望在不同的目录中有不同的视图(NOT AREAS!),这样当URL包含某个字符串时,viewEngine将为来自不同目录的另一个视图(相同名称)提供服务。

代码在这里:

 public class CheckinViewEngine : WebFormViewEngine
{
    public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
    {
        ViewEngineResult result;
       var routData = controllerContext.RequestContext.RouteData.Values;
       if (controllerContext.RequestContext.HttpContext.Request.Path.ToUpper().Contains("UP"))
       {
         result=  base.FindView(controllerContext, "Home/Up/" + viewName, masterName, useCache);
       }
       else
       {
          result=  base.FindView(controllerContext, viewName, masterName, useCache);
       }
        return result;
    }    
}

在这种情况下,我检查URL是否包含"UP"。

在Global.asax中,我添加了:

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CheckinViewEngine ());

我的问题是:ViewEngineResult.View为null,而且,在任何请求时,我都会得到该方法的无限循环请求。

有什么想法吗?

1)我会添加您想要在其中查找视图的"特殊"位置。请参阅此处:

我可以指定一个自定义位置来";搜索视图";在ASP.NET MVC中?

2) 然后,对于您希望位于该文件夹中并在找到"特殊"url单词时使用的视图,请将它们添加到该文件夹中,但在视图的文件名中使用.up(或其他)。因此,如果它通常是Index.chtml,请添加一个名为Index.Up.shtml的

3) 然后在FindView方法中,对url进行测试,如果找到,则将视图名称重命名为.Up版本,以便视图引擎可以找到它。

相关内容

  • 没有找到相关文章

最新更新