我希望在不同的目录中有不同的视图(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版本,以便视图引擎可以找到它。