项目名称下的文件夹中已有控制器和视图。我添加了一个Area文件夹,然后在其中添加了一个区域并将其称为Home,然后将我的控制器和索引视图移动到其中。但是当我连接到索引时,我得到一个错误,看起来它寻找索引的路径是旧路径,我该如何将其更改为新路径?
这是我创造的
In' HomeAreaRegistration'我在RegstrationArea下看到了这个
public class HomeAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Home";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Home_default",
"Home/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
但是当我在IE中运行应用程序时,这就是我在浏览器中看到的内容!看起来它在旧路径位置寻找index.cshtml,而不是新区域中的新路径位置' Home'
看起来路线引擎看错了位置。所以这是我的RouteConfig.cs文件的样子。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
即使我尝试' https://localhost:44301/Home/Index.cshtml'它会抛出HTTP 404错误。
答案 0 :(得分:3)
404错误显示主要问题本身:默认路由和视图引擎搜索在项目的Index.cshtml
目录中找不到默认的Views
视图文件(即ProjectName/Views/Index.cshtml
指向路由{{ 1}})。
首先,创建一个类以包含自定义区域的视图位置搜索,如下例所示:
~/Views/Home/Index
然后,将所有区域和自定义视图引擎包含在public class CustomView : RazorViewEngine
{
public CustomView()
{
MasterLocationFormats: new[]
{
"~/Areas/Home/Views/{0}.cshtml",
"~/Areas/Home/Views/{1}/{0}.cshtml"
}
ViewLocationFormats: new[]
{
"~/Areas/Home/Views/{0}.cshtml",
"~/Areas/Home/Views/{1}/{0}.cshtml"
}
PartialViewLocationFormats = ViewLocationFormats;
FileExtensions = new[]
{
"cshtml"
};
}
}
中:
Global.asax
如果protected void Application_Start()
{
// register all area locations
AreaRegistration.RegisterAllAreas();
// clear default view engine
ViewEngines.Engines.Clear();
// add your custom view engine here
// the custom view engine should loaded before default view engine (e.g. Razor)
ViewEngines.Engines.Add(new CustomView());
ViewEngines.Engines.Add(new RazorViewEngine());
}
目录中有RouteConfig
个班级,请确保在默认路由前包含App_Start
:
RegisterAllAreas
此外,在需要时添加控制器名称的命名空间或上述解决方案仍然无效:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
注意:如果您想要关注路由汇率public class HomeAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Home";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Home_default",
"Home/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "ProjectName.Areas.Home.Controllers" }
);
}
}
,请在Home
下创建Views
目录,并将~/Areas/Views/Home/Index
文件放入其中。
参考文献:
答案 1 :(得分:0)
您必须在解决方案中进行以下更正:
1)在视图中添加文件夹主页并在其中放置index.cshtml。 用于视图的文件夹结构必须是:主页(区域名称)>意见> Home(与控制器同名)> index.cshtml(如图所示)
2)将Homecontroller的命名空间更改为(解决方案名称).Areas.Home.Controllers
3)此外,您还必须参考以下路线模式:
localhost/AreaName/Controller/Action
在你的情况下:
https://localhost:44301/Home/Home/Index
希望这可以解决您的问题
答案 2 :(得分:0)