Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET 4 RTM中的可选路由参数不再像以前那样工作_Asp.net Mvc_Asp.net Mvc 2_Asp.net 4.0_Asp.net Routing - Fatal编程技术网

Asp.net mvc ASP.NET 4 RTM中的可选路由参数不再像以前那样工作

Asp.net mvc ASP.NET 4 RTM中的可选路由参数不再像以前那样工作,asp.net-mvc,asp.net-mvc-2,asp.net-4.0,asp.net-routing,Asp.net Mvc,Asp.net Mvc 2,Asp.net 4.0,Asp.net Routing,今天我用ASP.netmvc2.0rtm将我的项目升级到ASP.net4rtm 我以前使用的是ASP.net3.5和ASP.netmvc2.0rtm 我的一些路线突然不起作用,我不知道为什么。我不确定3.5和4.0之间是否发生了变化,或者这是否是4.0 RTM中的回归类型问题。(我以前从未用4.0测试过我的应用程序) 我喜欢使用Url.RouteUrl(“路由名称”,routeParams)来避免在生成Url时产生歧义。这是我的画廊页面的路线定义。我希望imageID是可选的(如果不指定,则会得

今天我用
ASP.netmvc2.0rtm
将我的项目升级到
ASP.net4rtm

我以前使用的是
ASP.net3.5
ASP.netmvc2.0rtm

我的一些路线突然不起作用,我不知道为什么。我不确定3.5和4.0之间是否发生了变化,或者这是否是4.0 RTM中的回归类型问题。(我以前从未用4.0测试过我的应用程序)

我喜欢使用
Url.RouteUrl(“路由名称”,routeParams)
来避免在生成Url时产生歧义。这是我的画廊页面的路线定义。我希望
imageID
是可选的(如果不指定,则会得到一个缩略图)

在.NET 3.5/ASP.NET 2.0 RTM/IIS7中

Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> /gallery/cats

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")             
=>  /gallery/cats/4

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")  
=>  /gallery/cats/4/tiddles
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> null

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")             
=>  /gallery/cats/4

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")  
=>  /gallery/cats/4/tiddles
在.NET 4.0 RTM/ASP.NET 2.0 RTM/IIS7中

Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> /gallery/cats

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")             
=>  /gallery/cats/4

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")  
=>  /gallery/cats/4/tiddles
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> null

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")             
=>  /gallery/cats/4

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")  
=>  /gallery/cats/4/tiddles
以前,我只能提供galleryID,在生成的URL中,其他所有内容都将被忽略。但是现在看起来我需要指定所有的参数,直到
title
——或者它放弃了确定URL

对于
/gallery/cats
而言,传入URL工作正常,并且通过此规则正确映射,
imageID
title
都在我的控制器中分配
null


我还使用测试了传入路由,它们都工作正常。

在ASP.NET MVC 2.0中指定可选参数的正确方法是使用以下字段:

假设以下控制器和操作:

public class GalleryController : Controller
{
    public ActionResult Index(string galleryID, string imageID, string title)
    {
        return View();
    }
}
所有这些都将按预期工作:

<%= Url.RouteUrl("gallery-route", new { galleryID = "cats" }) %><br/>
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4"}) %><br/>
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles" })%>

备注:在Windows 7 x64、Visual Studio 2010 RTM、ASP.NET MVC 2.0项目上测试。

我知道问题是针对MVC2的,但在MVC3中,Darin Dimitrov给出的答案将失败

Phil Haack在他的博客中解释了这个问题并给出了解决方案:

如果有人能在.NET 4 RC中测试这一点,我将不胜感激。我只有一台机器:-(这是一个3.5或4.0框架项目吗?确实有些变化,因为我没有更改mvc版本。我实际上认为我以前使用optional进行过测试,但实际上它使用了render UrlParameter。输出URL是可选的。感谢您对其进行测试。我将再尝试一次。这是我使用V创建的一个4.0框架项目iVisual Studio模板。
/gallery/cats
/gallery/cats/4
/gallery/cats/4/tiddles