[英]ASP.NET MVC - Routing doesn't work
我正在使用vs 2013练习ASP.NET MVC,并编写了一个具有一个控制器和视图的简单项目。
控制器代码:
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
public ActionResult ShowMyHome()
{
return View("MyHome");
}
}
“ MyHome”视图代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Hello World</title>
</head>
<body>
<div>
Welcome my first MVC page
</div>
</body>
</html>
RouteConfig代码:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Home",
url: "Home",
defaults: new { controller = "Home", action = "ShowMyHome", id = UrlParameter.Optional }
);
}
}
当我运行并在“ http:// mySite / Home / ShowMyHome ”上设置网址行时,它运行良好。 但是当我运行并在“ http:// mySite / Home ”上设置网址行时,出现错误:
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
看起来“本地”路由无效。
由于您的控制器名称为HomeController
,因此导航到~/Home
会匹配默认路由,因此无法达到您的Home
路由。
如果您想要的结果是将~/Home
明确映射到ShowMyHome()
则需要将自定义路线移到默认路线上方。
您无需为创建的每个控制器动作定义单独的路由,十分之九(默认路由)就可以了。
问题不在于路由,而是ASP.NET找不到您的Index.cshtml
视图。 您需要为Index()添加一个视图。
您仍然具有指向“索引”视图和操作的默认路由,该默认路由不存在。 将自定义路由放在默认路由之前,您的问题应得到解决。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Home",
url: "Home",
defaults: new { controller = "Home", action = "ShowMyHome", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
routes.MapRoute(
name: "Home",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "ShowMyHome", id =UrlParameter.Optional }
);
您将需要为Index创建一个视图。 在控制器中,右键单击Index()并选择“添加视图”。
然后,完成向导以了解该视图的行为。
编辑:根据我看到的答案,我相信可能会有一点误会。 您不必为制作的每个Controller创建新的路由。 通常,您应该使用默认路由并将“索引”用作主页。 当您需要向控制器提供的信息不仅仅限于/ action / id时,自定义路由通常会发挥作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.