我想在不同的目录中有不同的视图(而不是区域!)因此,当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是空的,而且,在任何请求时,我都会收到对此方法的无限循环请求。
有什么想法吗?
发布于 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版本,以便视图引擎可以找到它。
https://stackoverflow.com/questions/20071809
复制相似问题