2017-05-26 29 views
0

我正在寫一個使用MVC區域的MVC應用程序。目前我們在我們的展示區域使用以下路線:MVC路由可以處理的參數數量是否有限制?

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{*id4}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

而且這個工作正常。然而,我們發現了有6個參數的控制行動的必要性:

public ActionResult _MyMethod(string id, string id2, string id3, string id4, string id5, string id6) 

,我們發現我們可以在URL中的第四ID就是串連成4 ID參數後添加此我們當前的設置,但是任何參數。

我們試圖延長路線接受的,我們需要像這樣的參數數目:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

但是,使用這條路線的頁面不再加載。

是否MVC路由有一些類型的CAP可以映射到參數的數量?我們還發現,如果我們將映射參數的數量縮減爲id,id2和id3,它將再次起作用,並將所有溢出連接到id3。

有沒有人有這方面的任何信息?

+0

你可以有你想要的(最多,你會超出查詢字符串限制,並拋出一個異常點) 。但只有最後一個參數可以標記爲'UrlParameter.Optional' –

+0

好的,所以在我的情況之上爲什麼它不會允許我需要的6個參數? –

+0

你是否刪除了所有'UrlParameter.Optional'。你爲什麼用'{* id6}'標記第六個? –

回答

1

ASP.NET MCV對參數數量沒有限制。

在你的情況

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

可變ID是可選但是ID4是強制性的。最後必須添加可選參數。

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id5}/{id6}/{id}/{id2}/{id3}/{*id4}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional , id6 = UrlParameter.Optional } 
); 

還是讓所有的參數可選

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional } 
); 
+0

只有最後一個參數可以標記爲'UrlParameter.Optional' –

+0

@Stephen Muecke你爲什麼這麼認爲?這些代碼適用於我,你有沒有任何文檔?我調查過'routes.MapRoute'調用堆棧,我已經在'ParsedRoute.Matched'方法中完成http://www.dotnetframework.org/default.aspx/[email protected]/[email protected]/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/xsp/System/Web/Routing/ParsedRoute @ cs/1305376/ParsedRoute @ cs第518行沒有證據表明只有一個參數可以標記爲UrlParameter.Optional。 –

+0

因爲如果你沒有提供所有的路由引擎,路由引擎無法知道哪個是哪個,因此使用查詢字符串,而不是路由值(使路由定義毫無意義) –

相關問題