2012-03-01 22 views
3

有時我的應用程序生成的,看起來像http://localhost/?Area=http://localhost/SomeController?Area=如何預防?面積=被添加到生成的URL

我目前沒有在這個項目中定義的任何領域的網址,我試圖消除區域註冊從應用程序啓動。

我發現的唯一答案是使用<a href="Url.Action()">網址。

必須有一個更清潔的方法來消除這種情況。手動從網址中刪除這個似乎提供了完全相同的結果,但我不確定爲什麼這會出現在第一位。

如何使用路由系統解決此問題? 請注意,我使用t4mvc產生actionlinks不是默認 MVC的ActionLink助手

編輯:

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 



    /// <summary> 
    /// Registers MVC Routing Collection. 
    /// </summary> 
    /// <param name="routes">The routes.</param> 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 




     routes.MapRoute(
      "secstdsrte", 
      "SecondaryStandards/{standardType}/{sampleid}", 
      MVC.Reports.SecondaryStandards(), 
      null, 
      new { standardType = new SecondaryStandardTypeConstraint() 

      } 
     ); 


     routes.MapRoute(
      "misaRoute", 
      "Misa", 
      MVC.Reports.MISA() 
      ); 

     routes.MapRoute(
      "outfallroute", 
      "Outfalls/{fromDate}/{toDate}", 
      MVC.Reports.Outfalls(ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate), 
      null, 
      new 
      { 
       fromDate = new DateTimeConstraint(), 
       toDate = new DateTimeConstraint() 
      } 
     ); 

     routes.MapRoute(
      "offspecRoute", 
      "Offspec/{fromDate}/{toDate}", 
      MVC.Reports.OleOffspec(ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate), 
      null, 
      new //route constraints 
      { 
       fromDate = new DateTimeConstraint(), 
       toDate = new DateTimeConstraint() 
      } 
     ); 

     routes.MapRoute(
      "searchRoute", 
      "Search", 
      MVC.Reports.Search() 

     ); 





     routes.MapRoute(
     "compareresultsroute", 
     "compare/{samplePoint}/{analysis}/{fromDate}/{toDate}", 
     MVC.Reports.CompareResults(null, null, null, ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate), 
     null, 
     new 
     { 
      samplePoint = new SamplePointExistsConstraint(), 
      analysis = new AnalysisExistsConstraint(), 
      fromDate = new DateTimeConstraint(), 
      toDate = new DateTimeConstraint() 
     } 

     ); 

     routes.MapRoute(
     "reportsRoute", 
     "Reports/{samplePoint}/{fromDate}/{toDate}", 
     MVC.Reports.Results("", ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate), 
     null, 
     new //route constraints 
     { 
      samplePoint = new SamplePointExistsConstraint(), 
      fromDate = new DateTimeConstraint(), 
      toDate = new DateTimeConstraint() } 
     ); 

     routes.MapRoute(
      "railcarsRoute", 
      "RailCars/{forDate}", 
      MVC.Reports.RailCars(ApplicationController.DefaultToDate), 
      null, 
      new { forDate = new DateTimeConstraint() } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new 
      { controller = "Reports", action = "Index", id =UrlParameter.Optional } // Parameter defaults 
     ); 
    } 
    /// <summary> 
    /// Returns boolean value indicating whether the application is currently in debug mode 
    /// </summary> 
    public static bool isDebugging 
    { 
     get 
     { 
      return HttpContext.Current != null && HttpContext.Current.IsDebuggingEnabled; 
     } 
    } 




    protected void Application_Start() 
    { 

     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 
+2

你用什麼來生成URL?我從來沒有見過標準的URL助手將一個Area =附加到一個URL。即使你使用區域,你仍然不會得到那樣的URL。區域通常是/ localhost/area/controller/action的形式 – mfanto 2012-03-01 20:50:54

+3

你可以發佈你的路由表和你用來生成url的代碼嗎? – bhamlin 2012-03-01 21:16:52

+0

更新後的路由 – 2012-03-02 05:17:58

回答

1

此問題先前在T4MVC @Url.Action(MVC.Controller.Action()) Renders "?Area=" Parameter in QueryString上討論過。

簡而言之,這是T4MVC中的一個錯誤,當網站不使用區域時。你可以通過刪除這一行來解決(在第303行左右):

result.RouteValueDictionary.Add("Area", area ?? ""); 
+0

大衛ebbo救援再次= D賞金是你的 – 2012-03-13 20:29:42

+0

一旦它允許我獎勵它 – 2012-03-13 20:30:06

1

你比可能結束了通話ActionLink的錯誤的超負荷更多。有一個重載需要RouteValueDictionary,人們會將它混淆爲html屬性(它看起來很相似)。

@Html.ActionLink("Link", "Action", "Controller", new { id = 1 }, new { @css="myclass" }) 

如果您未指定路由值,則使用空值。

@Html.ActionLink("Link", "Action", "Controller", null, new { @css="myclass" }) 
+0

即時通訊使用t4mvc鏈接與動作助手,但生病了仔細看看它 – 2012-03-02 13:05:28

+0

使用標準操作鏈接助手修復了問題,但仍然發生在使用t4mvc鏈接時,這是t4mvc中的錯誤,沒有正確設置區域或一個問題,它是如何定義的路線 – 2012-03-13 00:39:36

相關問題