我有兩種沖突的操作方法。基本上,我希望能夠使用兩條不同的路線(通過項(xiàng)的ID或項(xiàng)的名稱及其父項(xiàng)(在不同的父項(xiàng)中,項(xiàng)可以具有相同的名稱))進(jìn)入同一視圖。搜索詞可用于過濾列表。例如...Items/{action}/ParentName/ItemNameItems/{action}/1234-4321-1234-4321這是我的動作方法(也有Remove動作方法)...// Method #1public ActionResult Assign(string parentName, string itemName) { // Logic to retrieve item's ID here... string itemId = ...; return RedirectToAction("Assign", "Items", new { itemId });}// Method #2public ActionResult Assign(string itemId, string searchTerm, int? page) { ... }這是路線...routes.MapRoute("AssignRemove", "Items/{action}/{itemId}", new { controller = "Items" } );routes.MapRoute("AssignRemovePretty", "Items/{action}/{parentName}/{itemName}", new { controller = "Items" } );我理解為什么會發(fā)生錯誤,因?yàn)閜age參數(shù)可以為null,但是我無法找出解決此問題的最佳方法。一開始我的設(shè)計(jì)不好嗎?我曾考慮過將Method #1的簽名擴(kuò)展為包括搜索參數(shù),并將邏輯Method #2移到它們都將調(diào)用的私有方法中,但是我認(rèn)為這不會真正解決歧義。任何幫助將不勝感激。實(shí)際解決方案(基于李維斯的答案)我添加了以下課程...public class RequireRouteValuesAttribute : ActionMethodSelectorAttribute { public RequireRouteValuesAttribute(string[] valueNames) { ValueNames = valueNames; } public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) { bool contains = false; foreach (var value in ValueNames) { contains = controllerContext.RequestContext.RouteData.Values.ContainsKey(value); if (!contains) break; } return contains; } public string[] ValueNames { get; private set; }}然后修飾動作方法...[RequireRouteValues(new[] { "parentName", "itemName" })]public ActionResult Assign(string parentName, string itemName) { ... }[RequireRouteValues(new[] { "itemId" })]public ActionResult Assign(string itemId) { ... }
- 3 回答
- 0 關(guān)注
- 481 瀏覽
添加回答
舉報(bào)
0/150
提交
取消