Asp.net 从区域内返回视图会导致显示不同的视图
当我运行网站时,我希望显示主视图,但它没有找到视图。如果我修改下面的代码,并从{controller}.mvc/{action}中删除.mvc,我将获得基本索引视图,而不是希望从主区域获得的主视图 从路由中删除.mvc后我注意到的是-找到并执行位于区域Home Controllers Home controller内部的Home controller Home controller,当返回视图且AreaViewEngine控制它时,它看不到区域,因此返回基本索引视图。。。有什么线索导致这一切吗 我有以下注册表项 以下是位于AreaViewEngine.cs中的ViewFind: 位于默认控制器根目录中的BaseController: 以下是位于家庭控制器区域的家庭控制器: 最后是Solutions Explorer的屏幕截图:Asp.net 从区域内返回视图会导致显示不同的视图,asp.net,asp.net-mvc,asp.net-mvc-4,Asp.net,Asp.net Mvc,Asp.net Mvc 4,当我运行网站时,我希望显示主视图,但它没有找到视图。如果我修改下面的代码,并从{controller}.mvc/{action}中删除.mvc,我将获得基本索引视图,而不是希望从主区域获得的主视图 从路由中删除.mvc后我注意到的是-找到并执行位于区域Home Controllers Home controller内部的Home controller Home controller,当返回视图且AreaViewEngine控制它时,它看不到区域,因此返回基本索引视图。。。有什么线索导致这一切吗
对于某个区域,必须指定它。试试这个
return RedirectToAction("Index", "Home", new { area = "Home" });
这对我不起作用,Firefox检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求-我应该提到HomeController也实现了IDisposable。我刚才搜索了,我的答案应该对你起作用。Home是mvc默认使用的保留字。因为它位于一个区域,我建议将该名称改为其他名称。看看这是否有帮助
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
ViewEngineResult areaResult = null;
if (controllerContext.RouteData.Values.ContainsKey("area"))
{
string areaViewName = FormatViewName(controllerContext, viewName);
areaResult = base.FindView(controllerContext, areaViewName, masterName, useCache);
if (areaResult != null && areaResult.View != null)
{
return areaResult;
}
string sharedAreaViewName = FormatSharedViewName(controllerContext, viewName);
areaResult = base.FindView(controllerContext, sharedAreaViewName, masterName, useCache);
if (areaResult != null && areaResult.View != null)
{
return areaResult;
}
}
return base.FindView(controllerContext, viewName, masterName, useCache);
}
public abstract class BaseController : Controller
{
public virtual ActionResult Index()
{
return View();
}
}
public class HomeController : BaseController
{
public HomeController()
{
}
public override ActionResult Index()
{
HomeDetailsViewModel model = new HomeDetailsViewModel();
model.User = "testing username"
return View("Index", model);
}
}
return RedirectToAction("Index", "Home", new { area = "Home" });