Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3区域路由冲突_Asp.net Mvc 3_Exception_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 3 MVC3区域路由冲突

Asp.net mvc 3 MVC3区域路由冲突,asp.net-mvc-3,exception,asp.net-mvc-routing,Asp.net Mvc 3,Exception,Asp.net Mvc Routing,问题:我希望我的路线是这样的 /管理员/main/category/1->1==?页面=1 我不想看到page=1 我的控制器 public class MainController : BaseController { private const int PageSize = 5; //pager view size [Inject] public ICategoryRepository CategoryRepository { get; set; } pu

问题:我希望我的路线是这样的

/管理员/main/category/1->1==?页面=1 我不想看到page=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:
参数字典包含参数“page”的空条目 方法的不可为Null的类型“System.Int32” 中的“System.Web.Mvc.ActionResult类别(Int32)” “WebUI.Areas.Admin.Controller.MainController”。可选参数 必须是引用类型、可为null的类型或声明为 可选参数。参数名称:参数


提前感谢大家。

请确保在管理区域路由注册中定义了
{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
参数。

+1谢谢,这已经成功了,但是我可以拥有多个“路线注册”吗?您可以拥有任意数量的路线注册。您只需要确保它们不冲突,并且路由引擎能够始终消除两者之间的歧义。例如,如果您有以下两个URL:
Admin/{controller}/{action}/{page}
Admin/{controller}/{action}/{id}
,给出一个url,如
/admin/main/category/5
路由引擎无法消除两条路由之间的歧义,并且总是选择第一条路由。我用默认路由测试了你的路由建议,但它不起作用,在我删除默认路由后,它起作用了。它不使用默认路由是正常的。这是因为它们相互冲突,互不兼容。可以使用管线约束。例如,如果您知道
{page}
始终是一个整数,
{id}
始终是一个字符串,则可以使用以下正则表达式路由约束:
page=@“\d+”
。要了解更多关于路由签出的信息,请阅读以下文章:我不知道您的要求是什么。例如,如果您的id只能包含[a-z]字符,并且您的页码只能是整数,那么您可以有两个路由:
context.MapRoute(“Admin_默认”、“Admin/{controller}/{action}/{action}/{id}”、new{action=“Index”、id=urlparmeter.Optional}、new{id=@“[a-z]*”});MapRoute(“Admin_page”、“Admin/{controller}/{action}/{page}”、new{action=“Index”}、new{page=@“\d+”})。但这一切都取决于您的确切应用要求。