我在MVC路由中有一些问题。我试图了解如何MVC路由有效,但似乎让我迷路了。您的帮助,非常感谢。
我在Global.asax中定义了以下两条路线route.MapRoute(“ Public”,“ Public / {controller} / {action}”,new {controller =“ Home”,action =“ Index”});route.MapRoute(“ ShopSchema2”,“ Shop / OldAction”,新{控制器=“主页”,操作=“索引”});
我的问题是(这些可能很简单,但我很困惑)1)当我输入“〜/ Public / Account / Register”时,它将转到“帐户控制器和注册”操作。为什么第一段(公共)不作为控制器的值?2)当我输入“〜/ Shop / OldAction”时,它会转到Home控制器和Index动作。请进行描述。3)路由系统默认是否将第一段作为控制器,第二段作为动作?4)路由系统是否将我们在url模式中在{和}中提到的任何内容用作段变量?更新:请分享您对此事的知识。非常需要。谢谢
您已在下面的代码中将“公共”作为固定短语:
Public/{controller}/{action}"
通常,那里没有“公共”。如果要使公共动态,则必须将其放在{public}之类的括号中,并在以下代码中为“ Public”添加功能:
{ controller = "Home", action = "Index" });
{ controller = "Home", action = "Index", public="None" });
在第二行中,将名为“ Public”的变量传递给actionresult,该变量默认带有字符串值“ None”,并且可以根据您用public替换的内容进行更改。
然而,在控制器变量之前放置任何变量并不常见。
{}中的任何内容都作为变量,它采用默认值,并且可以根据用户输入的地址进行更改。
routes.MapRoute("ShopSchema2", "Shop/OldAction", new { controller = "Home", action = "Index" });
默认情况下,以上代码转到首页/索引。您尚未在其中设置任何变量。
我希望这能回答所有3个问题
Routing System通常用于MVC。但是,它被设计为与标准ASP.NET项目或WebForms一起使用。这是将路由系统组装件放置在系统中的主要原因。 Web,而不是严格在System.Web.MVC中。首次创建时,要添加到您的MVC项目中的程序集名称称为System.Web.Routing。但是,系统。网络足以使路由系统与您的project一起使用。
public static void RegisterRoutes(RouteCollection routes)
{
Route myRoute = new Route("{controller}/{action}", new MvcRouteHandler());
routes.Add("MyRoute", myRoute);
}
实际上,路由器是在Global.asax.cs文件中设置的,而不仅仅是在Global.asax中设置的。但是,通常将路由器视为Global.asax文件的一部分。