私は奇妙な問題を抱えています。Url.Action と Url.RouteUrl は開発サーバー (IIS 7.5、Windows 7) では正しくレンダリングされますが、実稼働ボックス (IIS 7.5、Win 2008 R2 を実行する専用サーバー) では同じコードが空白になります。
私のビューのhtmlは次のとおりです。
<div style="display:none;">
<a href='@Url.Action("generateCaptcha", "Home" )' id="generateCaptcha"></a>
<a href='@Url.Action( "send", "Home" )' id="send"></a>
<a href='@Url.Action("check_captcha", "Home")' id="check_captcha"></a>
<a href="@Url.RouteUrl("default", new { action = "generateCaptcha", controller = "Home" })" id="generateCaptcha1"></a>
<a href="@Url.RouteUrl("default", new { action = "send", controller = "Home" })" id="send1"></a>
<a href="@Url.RouteUrl("default", new { action = "check_captcha", controller = "Home" })" id="check_captcha1"></a>
</div>
ビュー ソースの出力は次のとおりです。
<div style="display:none;">
<a href='' id="generateCaptcha"></a>
<a href='' id="send"></a>
<a href='' id="check_captcha"></a>
<a href="" id="generateCaptcha1"></a>
<a href="" id="send1"></a>
<a href="" id="check_captcha1"></a>
</div>
開発環境と製品環境の違いは、私の開発マシンには mvc4 がインストールされ、製品ボックスには mvc3 のみがインストールされていることです。
プロダクションボックスでrouteDebugを試しました。home/generateCaptcha を参照すると、「デフォルト」ルートが選択されます。
なぜ url.action が実稼働ボックスでのみ正しい URL を生成できないのか理解できません。
展開中に、展開可能な依存関係も追加しました。
次のルートが定義されています。
routes.MapRoute(
name: "ByCatSubCat" // Route name
, url: "browse/{categoryName}/{subcategoryName}/" // URL with parameters
, defaults: new { controller="Greeting", action="List"} // Parameter defaults
);
routes.MapRoute(
name: "CardDetail" // Route name
, url: "browse/{categoryName}/{subcategoryName}/card{id}" // URL with parameters
, defaults: new { controller = "Greeting", action = "Details" } // Parameter defaults
);
routes.MapRoute(
name: "ByCatSubCatAll" // Route name
, url: "browse/{categoryName}/{subcategoryName}/" // URL with parameters
, defaults: new { controller = "Greeting", action = "List", subcategoryName="all" } // Parameter defaults
);
routes.MapRoute(
name: "ByCat" // Route name
, url: "browse/{categoryName}/" // URL with parameters
, defaults: new { controller = "Greeting", action = "List" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}/", // URL with parameters
new { controller = "Greeting", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
助けてください。
更新: ここでは UrlParameter.Optional が機能しないようです。UrlParameter.Optional を使用せずにルートをもう 1 つ追加すると、すべてのリンクが実稼働ボックスで機能し始めました。
私の更新されたルートは次のとおりです。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ByCatSubCat" // Route name
, url: "browse/{categoryName}/{subcategoryName}/" // URL with parameters
, defaults: new { controller = "Greeting", action = "List" } // Parameter defaults
);
routes.MapRoute(
name: "CardDetail" // Route name
, url: "browse/{categoryName}/{subcategoryName}/card{id}" // URL with parameters
, defaults: new { controller = "Greeting", action = "Details" } // Parameter defaults
);
routes.MapRoute(
name: "ByCatSubCatAll" // Route name
, url: "browse/{categoryName}/{subcategoryName}/" // URL with parameters
, defaults: new { controller = "Greeting", action = "List", subcategoryName = "all" } // Parameter defaults
);
routes.MapRoute(
name: "ByCat" // Route name
, url: "browse/{categoryName}/" // URL with parameters
, defaults: new { controller = "Greeting", action = "List" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/", // URL with parameters
new { controller = "Greeting", action = "List" } // Parameter defaults
);
routes.MapRoute(
"Default1", // Route name
"{controller}/{action}/{id}/", // URL with parameters
new { controller = "Greeting", action = "List", id = UrlParameter.Optional } // Parameter defaults
);