質問

した私のプロジェクトを ASP.NET 4 RTMASP.NET MVC 2.0 RTM ます。

また利用 ASP.NET 3.5ASP.NET MVC 2.0 RTM.

一部の路線で働いていない突然、知らないうのではないでしょうか。さんが何か変更の間3.5 4.0またはこのた回帰型の4.0RTM.いずれの試験は私のアプリ4.0).

私のように利用 Url.RouteUrl("route-name", routeParams) を避ける曖昧さを発生する場合にはUrlに対するものとなります。ここでの私のルート定義のためのギャラリーのページです。したい imageID するオプション(できるサムネイルページでない場合に指定します。

// gallery id
routes.MapRoute(
    "gallery-route",
    "gallery/{galleryID}/{imageID}/{title}",
    new { controller = "Gallery", action = "Index", 
          galleryID = (string) null, 
          imageID = (string) null, 
          title = (string) null}
);

ます。純3.5/ASP.NET 2.0RTM/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

ます。NET4.0RTM/ASP.NET 2.0RTM/IIS7

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 もう無視され、生成されます。ものを見ようかを指定する必要がありすべてのパラメータまで title -までを決定する。

受信用Url作 /gallery/cats ことになるが正しくマップを通じてこの規則 imageIDtitle 存在していたと考えられている割り当て null 私のコントローラです。

また試験の受信路 http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx 彼らはすべての作業。

役に立ちましたか?

解決

正しい方法を指定するオプションパラメータASP.NET WEB2.0を使用して UrlParameter.オプション 分野:

routes.MapRoute(
    "gallery-route",
    "gallery/{galleryID}/{imageID}/{title}",
    new
    {
        controller = "Gallery",
        action = "Index",
        galleryID = UrlParameter.Optional,
        imageID = UrlParameter.Optional,
        title = UrlParameter.Optional
    }
);

仮に、以下のコントローラーやアクション:

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" })%>

描画すると:

/gallery/cats
/gallery/cats/4
/gallery/cats/4/tiddles

備考:試Windows7x64、Visual Studio2010RTM、ASP.NET MVC2.0ます。

他のヒント

私は質問は、ダーリンディミトロフによって与えられた答えは失敗しますMVC2のためではなく、MVC3である知っています。

フィル・ハークは、問題を説明し、自身のブログで周りの仕事を与えました: ます。http:// haacked .COM /アーカイブ/ 2011/02/20 /ルーティング-回帰と-2-連オプション-URL-parameters.aspxする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top