2012-11-14 58 views
2

當我將MVC4應用程序發佈到我的Web服務器時,遇到了一個奇怪的問題。MVC ActionLinks在發佈到服務器時呈現爲空

一切工作正常,我確實改變了我的路由配置中的一些設置。

問題是,當我在localhost上運行網站時,我所有的鏈接都呈現出色。

@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:如果我從控制器中刪除param2和param2,所有按預期工作...什麼是HECK!?

更新3:問題解決了,確實很奇怪。看到我的答案。

回答

1

我有一個ASP .NET MVC 3應用了類似的問題,這是通過添加

<modules runAllManagedModulesForAllRequests="true" />

到web.config文件的<system.webServer>部分解決。該應用在開發機器上運行良好,但不是服務器。

+0

已經有該部分。 :( –

2

這是ASP.NET MVC的一個已知問題。

我挖掘並發現,如果您使用Html.ActionLink屬性,服務器將經常嘗試填寫任何缺少的參數,由於某些原因導致URL呈現空白。

我不確定這個原因,我相信別人可以提供更多的洞察力。

基本上,除非每個URL都包含參數,否則基本上不能在默認路由中擁有多個ID。

所以我所做的就是創建了第二條路線,並做出工作像這樣的鏈接:

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

     );    


    } 
} 

這工作得很好,但我還是完全喪失了爲什麼我的開發服務器上沒有發生這個問題。也許微軟已經修補了這種瘋狂,我的主機還沒有更新他們的框架。

我希望這可以節省一些挫折感。

相關問題