use*_*602 5 asp.net-mvc asp.net-mvc-routing
我正在接受MVC routing frame work.我对RouteCollection.MapRoute方法所采用的参数感到有点困惑.
如果我采取了以下请求的传统示例
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- List item
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Run Code Online (Sandbox Code Playgroud)
它使用以下签名进行映射
public static Route MapRoute(
this RouteCollection routes,
string name,
string url,
Object defaults
)
Run Code Online (Sandbox Code Playgroud)
我的问题是关于"对象默认值",
new { controller = "Home", action = "Index", id = "" }CLR interpret sequence参数?跟进问题:
一个.为什么我们在一个括号{}内装饰控制器,动作或id?
湾 URL指定和默认值之间是否有匹配?
为什么我们将它用作 new {controller = "Home", action = "Index", id = "" }
基本上用默认值初始化路由。您传递到方法中的值MapRoute将转换为IDictionary<string, object>供以后查找的值。
Is this is a fixed format?
Run Code Online (Sandbox Code Playgroud)
不,您可以根据您的 URL 省略或添加更多值。您在默认值中指定的值将用于查找。
例如,您可以设置路由名称搜索如下:
routes.MapRoute(
name: "Search",
url: "{controller}/{action}/{searchId}",
defaults: new {controller = "Account", action = "Login", searchId = UrlParameter.Optional}
);
Run Code Online (Sandbox Code Playgroud)
CLR 如何解释参数的顺序?
通过将它们添加到字典中(准确地说是 RouteValueDictionary)。
A。为什么我们要在括号{}内装饰controller、action或id?
简短的回答,这是一个约定...长的回答,根据 MSDN,摘自MSDN 文章
在 URL 模式中,您可以通过将占位符括在大括号( { 和 } )中来定义它们。您可以在一段中定义多个占位符,但它们必须用文字值分隔。例如,{语言}-{国家/地区}/{操作} 是有效的路由模式。但是,{语言}{国家}/{操作} 不是有效模式,因为占位符之间没有文字值或分隔符。因此,路由无法确定在哪里将语言占位符的值与国家/地区占位符的值分开。
b. Is there any match in between URL specify and defaults?
Run Code Online (Sandbox Code Playgroud)
是的,默认值适用于 URL 中的占位符。如果添加更多默认值然后占位符,它将被忽略。如果 URL 中未包含该参数的值,则使用默认值。
如需了解更多信息,我将向您推荐这篇优秀的MSDN 文章。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
10805 次 |
| 最近记录: |