2012-05-11 2 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.Web.Mvc.ActionResult C '방식 비 널 타입'선택 System.Int32 '의 파라미터'페이지 '에 대한 널 (NULL) 엔트리를 포함 ategory (Int32) ' 에서'WebUI.Areas.Admin.Controllers.MainController '입니다. 선택 매개 변수 은 참조 유형, null 입력 가능 유형이거나 선택적 매개 변수로 선언되어야합니다. 매개 변수 이름 : 매개 변수

감사합니다.

답변

1

귀하의 관리 영역 경로 등록에 기본적으로 생성되는 토큰 대신 {id}{page} 경로를 정의했는지 확인 : 당신이 링크를 생성 할 때 이제

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이 요청되면 Category 액션이 호출되고 page=5 매개 변수가 전달됩니다.

+0

+1 해 주셔서 감사 드리지만 하나 이상의 "경로 등록"을 할 수 있습니까? – IamStalker

+0

여러 경로 등록이 가능합니다. 서로 충돌하지 않도록 라우팅 엔진이 그 사이에 항상 모호 할 수 있습니다. 예를 들어'Admin/{controller}/{action}/{page}'와'Admin/{controller}/{action}/{id}'URL을 가지고 있다면'/ admin/main/category/5' 라우팅 엔진은 두 경로 사이를 명확히 할 수 없으며 항상 첫 번째 경로를 분명히 선택합니다. –

+0

기본 경로 제안을 테스트했으며 작동하지 않습니다. 기본 경로를 삭제 한 후에 작동했습니다. – IamStalker