簡體   English   中英

當我在同一個控制器上使用兩個地圖路由時,MVC 路由空參數錯誤

[英]MVC routing null parameters error when i use two map-route on the same controller

我試圖在我的 mvc 項目中使用地圖路線,第一條路線“route1”工作正常,有兩個參數http://localhost:43601/records/index/1/5454546

現在第二條路線 - 在同一個控制器上 - 記錄控制器 - 不工作“route2” http://localhost:43601/records/attachmentdetails/828/2並給出了一個錯誤:

參數字典包含非空類型“System.Int32”的參數“attId”的空條目,用於方法“System.Web.Mvc.ActionResult AttachmentDetails(Int32, Int32)”

有什么幫助嗎?

//route code 
routes.LowercaseUrls = true;
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            //Web API
            routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
            routes.MapRoute(
        name: "route1",
        url: "{controller}/{action}/{libId}/{recordNo}",
        defaults: new { controller = "Records", action = "Index", id = UrlParameter.Optional }
    );
            routes.MapRoute(
           name: "route2",
           url: "{controller}/{action}/{attId}/{atype}",
           defaults: new { controller = "Records", action = "AttachmentDetails", id = UrlParameter.Optional }
       );
                routes.MapRoute(
           name: "Default",
           url: "{controller}/{action}/{id}",
           defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
       );
            routes.MapRoute(
           name: "Default4",
           url: "{controller}/{action}/{attId}/{atype}",
           defaults: new { controller = "FileManager", action = "BookAttachmnt", id = UrlParameter.Optional }
       );
//controllers code
public ActionResult Index(string libId, int recordNo = 0)
        {
}
public ActionResult AttachmentDetails(int attId, int atype)
        {
            BasicSearchAttribute();
            return View();
        }

你是匹配route1當你真的要匹配route2

為此,請改用此路由,並將其放在route1之前

routes.MapRoute(
       name: "route2",
       url: "Records/{action}/{attId}/{atype}",
       defaults: new { controller = "Records", action = "AttachmentDetails", id = UrlParameter.Optional }
 );

您的代碼不起作用的原因是路由是“自上而下”匹配的(即它們的定義順序)。 您正在使用的URL符合規則route1它符合規則之前, route2 唉, route1有不同的參數名稱( libId而不是attId ),因此路由失敗,因為您的操作需要attId參數,但被賦予libId參數。

但是將上述路由放在首位意味着它會被使用,而不是route1 另請注意,我有硬編碼Records的路線,以確保與開頭的網址Records被處理的route2一切被處理route1 (或更高版本的路線)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM