0

質問:私のルートをそのようにしたい

/ admin / main / category / 1-> 1 ==?page=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:

パラメータディクショナリには、'WebUI.Areas.Admin.Controllers.MainController'のメソッド'System.Web.Mvc.ActionResult Category(Int32)'のnull許容型ではないタイプ'System.Int32'のパラメータ'page'のnullエントリが含まれています。オプションパラメータは、参照型またはnull許容型であるか、オプションパラメータとして宣言されている必要があります。パラメータ名:パラメータ

よろしくお願いします。

4

1 に答える 1

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が要求されると、Categoryアクションが呼び出され、page=5パラメーターが渡されます。

于 2012-05-11T09:41:19.060 に答える