[英]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.