发布到服务器时,MVC ActionLinks呈现为空

时间:2012-11-14 07:11:03

标签: asp.net-mvc razor asp.net-mvc-4

当我将MVC4应用程序发布到我的Web服务器时,我遇到了一个奇怪的问题。

一切正常,我确实在路由配置中更改了一些设置。

问题在于,当我在localhost上运行网站时,我的所有链接都会呈现出色。

@Html.ActionLink("Market Summary","Market","Home")将呈现为网址。

但是,当我将项目上传到我的服务器(winhost)时,只要我将鼠标悬停在一个链接上,它就会指向我的域名。它在我的项目中的任何页面上执行此操作...

我不知道为什么会发生这种情况,因为它在localhost上工作正常。

这是我的路由配置。

   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Web;
   using System.Web.Http;
   using System.Web.Mvc;
   using System.Web.Routing;

   namespace ReportGenerator.Web
   {
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );


        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{param2}/{param3}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional , param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }

         );


    }
  }
 }

更新:链接实际上呈现为空白。 <a href="">

更新2:如果我从控制器中删除param2和param2,那么所有工作都按预期工作...... HECK是什么!?

更新3:问题解决了,确实是非常奇怪的问题。看我的回答。

2 个答案:

答案 0 :(得分:2)

这是ASP.NET MVC的一个已知问题。

我挖了一遍,发现如果你使用Html.ActionLink属性,服务器通常会尝试填写任何缺失的参数,这些参数由于某种原因导致url呈现为​​空白。

我不确定原因,我相信其他人可以提供更多的见解。

基本上,除非每个网址都包含参数,否则您在默认路由中不能拥有多个ID。

所以我所做的是创建了一条SECOND路线并制作了类似的链接:

   @Html.RouteLink(Model.MembershipCount.ToString(), "detailed", new { action="YourActionName", id = "blah", param2 = "foo", param3 = "foo2" }, null) 
   //detailed is where you put whatever you named your route.

我的路由类现在看起来像这样

   public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional}

        );

        routes.MapRoute(
            name: "Detailed",
            url: "{controller}/{action}/{id}/{param2}/{param3}",
            defaults: new { controller = "Home", action = "home", id = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }

         );             


    }
}

这很好,但我仍然完全不知道为什么我的开发服务器上没有出现这个问题。也许微软修补了这种疯狂,我的主人还没有更新他们的框架。

我希望这可以挽救某些人的挫败感。

答案 1 :(得分:1)

我在ASP .NET MVC 3应用程序中遇到了类似问题,并通过添加

解决了这个问题

<modules runAllManagedModulesForAllRequests="true" />

进入web.config文件的<system.webServer>部分。该应用程序在开发机器上运行良好,但在服务器上运行良好。