オプションルートパラメータASP.NET 4RTMなど
-
26-09-2019 - |
質問
した私のプロジェクトを ASP.NET 4 RTM
と ASP.NET MVC 2.0 RTM
ます。
また利用 ASP.NET 3.5
と ASP.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
ことになるが正しくマップを通じてこの規則 imageID
や title
存在していたと考えられている割り当て 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する