【问题标题】:The ASP.NET MVC Routing Querystring vs Embedded Value BewildermentASP.NET MVC 路由查询字符串与嵌入式值的困惑
【发布时间】:2012-02-07 23:22:56
【问题描述】:

这可能已经被问过了 - 如果很抱歉!我找不到它。 我不确定 asp 如何决定何时使用查询字符串和“正常外观的路径”(嵌入值) 以此为例:

routes.MapRoute(

    "SomePage",
    "Net/Fix/{value}",
    new { controller = "Net", action = "Index" }
    );

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

我不知道如何解释-我会尝试..如果我错了,请解释一下

问题 1。 是 mapRoute 中的第一个参数,以便我们可以指定使用超链接时要进行的路由吗?

问题 2。 第二个参数有什么作用? 似乎第二个参数为您提供了指定路由应如何发生的选项,如下所示:“Net/Fix/hello”或通过以 {controller}/{action}/{somevar}

的形式指定占位符>

问题 3: 我假设如果在问题 2 场景中没有使用任何内容 - 这指定了应该发生的默认路由?

问题 4: ASP.NET 如何推断是使用查询字符串还是嵌入值..

因为例如当我决定调用我的页面时

http:/localhost:portno/Net/Fix/hello

它尽职尽责地打印 hello.. 但是当我这样做时 this

http:/localhost:portno/Net/Index/hello

它不起作用..除非我这样做

http:/localhost:portno/Net/Index?value=hello..

问题是……为什么?!!!

我希望问题很清楚。我会回复答案(如果以后有的话)。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    第一个参数是路由名称。每条路由都应该有一个唯一的名称,它们可用于创建链接,以确保链接基于某个路由。在您匹配路线的情况下,这并不重要。

    第二个参数是一个匹配模式。字面量值在大括号内以清晰和参数化的值显示。 {}。参数化值不仅用于指定参数的位置,还用于指定参数的名称

    我不确定你为什么要定义一个没有任何匹配模式的路由。 MapRoute() 这样的重载是否存在?

    您使用此 url 获得行为的原因:http:/localhost:portno/Net/Index?value=hello 它匹配 second(默认)路由,而不是第一个。

    不过,看看第二种路由模式:

    "{controller}/{action}/{id}"
    

    控制器是第一个参数,动作是第二个。因此,使用您的 URL,该请求将被路由到 Net 控制器 Index 操作。和你的第一个例子一样。

    因为查询字符串包含一个value 参数,它仍然被传递给操作方法。碰巧你的操作方法有一个名为valuestring 参数,所以它可以工作。

    【讨论】:

    • 是的,重载有效,抱歉,您并没有真正解释查询字符串问题。我知道 "Net/Index" 与第二个匹配 - 我只是不知道为什么它与查询字符串匹配:"Net/Index?value=hello" 而不是 "Net/Index/你好”,适用于第一条地图路线。两条路由中都没有区分查询字符串和使用嵌入值的内容。请解释。谢谢..
    • 另一个问题:我注意到在 RouteLinks 中使用了路由名称 - 我认为这是给路由命名的目的.. 否则我不知道 asp 如何知道要使用哪个,因为我们从来没有在 url 中指定路由名称。我明白您所说的 {} 值指定位置的意思。但是 name?这有点令人困惑..
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多