asp.net-mvc - 发布到服务器时 MVC ActionLinks 呈现为空

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

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

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

问题是,当我在本地主机上运行网站时,所有链接都呈现得非常好。

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

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

我不知道为什么会发生这种情况,因为它在本地主机上运行良好。

这是我的路由配置。

   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:如果我从 Controller 中删除 param2 和 param2,一切都会按预期工作...到底是什么!?

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

最佳答案

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

我仔细研究后发现,如果您使用 Html.ActionLink 属性,服务器通常会尝试填写任何缺失的参数,这会由于某种原因导致 url 呈现为空白。

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

基本上,默认路由中不能有多个 ID,除非每个 URL 都包含参数。

所以我所做的是创建了第二条路线并创建了如下所示的链接:

   @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 }

         );             


    }
}

这工作正常,但我仍然完全不知道为什么这个问题没有出现在我的开发服务器上。也许微软已经修补了这个疯狂的问题,而我的主机只是没有更新他们的框架。

我希望这可以减轻一些人的挫败感。

关于asp.net-mvc - 发布到服务器时 MVC ActionLinks 呈现为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374432/

相关文章:

asp.net - MVC 是构建在 Web 表单之上的吗?

Javascript 库未加载以用于加载页面的部分 View

c# - ASP.NET Core MVC 标记帮助器参数中的字符串文字

asp.net-mvc - 使用 ASP.NET MVC3 在自定义 Htmlhelper 中查找区域名称和 Controller 名称

Url.Content 中的 Javascript 变量

c# - 将 MySql 与 EntityFramework 5.0、SimpleMembership 一起使用,多个错误

asp.net-mvc - 从另一个调用一个 Razor 助手

ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery

dependencies - 我可以将 ravendb 客户端与 Microsoft.AspNet.WebApi.Client 一起安装吗?

c# - 在 jquery 模态对话框中定义 ui-widget-content 的边框