当我运行网站时,我希望显示Home
视图,但它找不到视图。如果我改变下面的代码,并从.mvc
中删除("{controller}.mvc/{action}"
,我会得到基本索引视图,而不是我希望从主区域获取的主视图。
从路由中删除.mvc
后我注意到的内容 - 找到并执行位于Home
内的Areas-Home-Controllers-HomeController
控制器,当视图返回时AreaViewEngine
抓住它,它没有看到区域,所以它返回基本索引视图...任何线索可能导致这个!?
我有以下RegisterRoutes
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapAreas("{controller}/{action}/{id}",
"ProjectNamespace.Web",
new[] { "Home" });
routes.MapRootArea("{controller}.mvc/{action}",
"ProjectNamespace.Web",
new { controller = "Home", action = "Index" });
}
ViewFind
位于AreaViewEngine.cs
:
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);
}
位于默认控制器根目录中的BaseController
:
public abstract class BaseController : Controller
{
public virtual ActionResult Index()
{
return View();
}
}
以下是Home
中的Areas-Home-Controllers
控制器:
public class HomeController : BaseController
{
public HomeController()
{
}
public override ActionResult Index()
{
HomeDetailsViewModel model = new HomeDetailsViewModel();
model.User = "testing username"
return View("Index", model);
}
}
最后,解决方案资源管理器的屏幕截图:
答案 0 :(得分:0)
对于您必须指定的区域。试试这个
return RedirectToAction("Index", "Home", new { area = "Home" });