2012-05-11 162 views
0

問:我想我的路線是這樣的MVC3地區衝突路由

/管理/主類別/ 1/- > 1 ==頁= 1 我不想頁= 1可以看出?

我的控制器

public class MainController : BaseController 
{ 
    private const int PageSize = 5; //pager view size 

    [Inject] 
    public ICategoryRepository CategoryRepository { get; set; } 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Category(int page) 
    { 
     //int pageIndex = page.HasValue ? page.Value : 1; 
     int pageIndex = page != 0 ? page : 1; 
     return View("Category", CategoryViewModelFactory(pageIndex)); 
    } 

    /* 
    *Helper: private instance/static methods 
    ======================================================================*/ 
    private CategoryViewModel CategoryViewModelFactory(int pageIndex) //generate viewmodel category result on pager request 
    { 
     return new CategoryViewModel 
     { 
      Categories = CategoryRepository.GetActiveCategoriesListDescending().ToPagedList(pageIndex, PageSize) 
     }; 
    } 
} 



    public class AdminAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "admin"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRouteLowercase(
       "AdminCategoryListView", 
       "admin/{controller}/{action}/{page}", 
       new { controller = "Category", action = "Category", page = "1" }, 
       new { id = @"\d+" }, 
       new[] { "WebUI.Areas.Admin.Controllers" } 
      ); 
     } 
    } 

My Exception: 

參數字典包含參數「頁」非空類型「System.Int32」的 爲方法 「System.Web.Mvc.ActionResult℃的空條目(Int32)' 'WebUI.Areas.Admin.Controllers.MainController'。可選參數 必須是引用類型,可爲空類型,或者聲明爲 可選參數。參數名稱:參數

謝謝大家提前。

回答

1

確保在您的管理區域航線登記您已經定義了{page}路線令牌,而不是{id}其默認生成:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{page}", 
     new { action = "Index", page = UrlParameter.Optional } 
    ); 
} 

現在,當你生成的鏈接請確保您指定此參數:

@Html.ActionLink(
    "go to page 5",       // linkText 
    "category",        // actionName 
    "main",         // controllerName 
    new { area = "admin", page = "5" },  // routeValues 
    null         // htmlAttributes 
) 

會發出:

<a href="/Admin/main/category/5">go to page 5</a> 

當請求這個URL時,類別動作將被調用並通過page=5參數。

+0

+1謝謝你的工作,但我可以有多個「路線註冊」? – IamStalker

+0

您可以有任意數量的路由註冊。你只需要確保它們沒有衝突,並且路由引擎能夠始終消除歧義。例如,如果你有以下2個URL:'Admin/{controller}/{action}/{page}'和'Admin/{controller}/{action}/{id}',給一個URL如'/ admin /主/類/ 5「路由引擎無法消除這兩條路由之間的歧義,並且會明顯地選擇第一條路由。 –

+0

我已經使用默認測試了您的路線建議,並且在我刪除了默認路線後它沒有工作,它確實有效。 – IamStalker