我有一个奇怪的问题。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>
dev 和 prod 环境之间的区别在于,在我的 dev 机器上安装了 mvc4,而在 prod box 上只安装了 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 的情况下再添加一条路线时,所有链接都开始在生产框中工作。
我更新的路线是:
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
);