Url.Action和Url.RouteUrl在生产框上呈现空(MVC3)

时间:2013-08-04 14:44:46

标签: asp.net-mvc-3 url-routing

我有一个奇怪的问题。 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机器上只安装了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
    );

1 个答案:

答案 0 :(得分:0)

您需要设置一个区域,例如:Url.Action(&#34; Models&#34;,&#34; Russian&#34;,new {brand = mod.Brand.NameEngShort,area =&# 34;目录&#34;})