已删除的bin文件夹,也已多次清理和重建。出于某种原因,在检查了路由配置所需的所有文件后,我遇到了命名错误,我更改了它并将其设置到最佳程度,但我被卡住了。我正在尝试学习asp.net,但这个错误令我目瞪口呆。
这是文件夹系统,我扩展了重要的文件夹:
Project-
Reference-
Packages-
App_Start-
-RouteConfig.cs
-WebApiConfig.cs
Areas-
-Billing
-Invoice
Content-
Controllers-
Models-
Scripts-
Views-
Global.asax
Pacages.config
Web.config
我的每个区域都有一个注册文件。
以下是其中一个区域的注册码。
using System;
using System.Web.Mvc;
namespace WORK_GODDAMN.Areas.Billing
{
public class BillingAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Billing";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Billing_default",
"Billing/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
这是我的Global.asax代码
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Http;
namespace WORK_GODDAMN
{
public class Global : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
这是我的routeConfig代码
using System.Web.Mvc;
using System.Web.Routing;
namespace WORK_GODDAMN
{
public class RouteConfig
{
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 },
namespaces: new string[] { "Core.Controllers" }
);
}
}
}
索引页面的cshtml代码,它应该重定向到预定义的区域。
<!DOCTYPE html>
<html>
@using System.Web.Optimization
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Scripts.Render("~/Scripts/modernizr.js")
</head>
<body>
<div>
<div>
<h2>{Demo}- Pluggable Modules</h2>
</div>
<div id="nav">
@Html.ActionLink("Home","Index","Home", new {Area=""}, null) |
@Html.ActionLink("Marketing","Index","Marketing", new {Area="Marketing"}, null) |
@Html.ActionLink("BillingMain", "Index", new { Area = "Billing" })
</div>
<hr />
<div>
@RenderBody()
</div>
</div>
@Scripts.Render("~/Scripts/jquery.js")
@RenderSection("Scripts", required: false)
</body>
</html>
我不是为什么会发生这种冲突,我已多次清理和重建,我使用2017 Mac Visual Studio,所以我必须自己配置区域。
答案 0 :(得分:1)
在此ActionLink中:
@Html.ActionLink("BillingMain", "Index", new { Area = "Billing" })
您没有指定控制器参数。
在您的区域注册中,您也没有指定控制器参数。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Billing_default",
"Billing/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
如果您未在路线中指定控制器参数,则它是必需参数,而不是可选参数。因此,此操作链接将与您的区域路线不匹配,并将尝试匹配注册的下一条路线(很可能是您的默认路线)。
要使控制器可选,您必须指定默认值。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Billing_default",
"Billing/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
否则,必须在ActionLink中提供它才能匹配:
@Html.ActionLink("Billing","Index","BillingMain", new {Area=""}, null)
路由值的最符合逻辑的行为通常是使值必需(就像你一样),因此只有在ActionLink提供值时它们才匹配。