首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写MVC4.0 ViewEngine

重写MVC4.0 ViewEngine
EN

Stack Overflow用户
提问于 2013-11-19 20:38:39
回答 1查看 622关注 0票数 1

我想在不同的目录中有不同的视图(而不是区域!)因此,当URL包含某个字符串时,viewEngine将服务于来自不同目录的另一个视图(同名)。

代码在这里:

代码语言:javascript
复制
 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中,我添加了:

代码语言:javascript
复制
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CheckinViewEngine ());

我的问题是这样的: ViewEngineResult.View是空的,而且,在任何请求时,我都会收到对此方法的无限循环请求。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-11-20 02:51:59

1)我会添加你想要在其中查找视图的“特殊”位置。请看这里:

Can I specify a custom location to "search for views" in ASP.NET MVC?

2)然后,对于你想要位于该文件夹中的视图,并在找到你的“特殊”url单词时使用它们,将它们添加到那里,但在视图的文件名中使用.up (或其他任何名称)。因此,如果它通常是Index.cshtml,则添加一个名为Index.Up.cshtml的函数。(如果您更感兴趣的是根据您的“特殊”字呈现视图,则可以跳过第一步。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20071809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档