2012-08-01 176 views
2

我一直在努力学习ASP.NET MVC 3和事情会从路由方面分得很开,无论我尝试我似乎无法让他们完全正确。ASP.NET MVC基本的路由与参数

我的主网页上的ActionLink:

@Html.ActionLink("Contracts", "List", "Contract", 
       new { User.Identity.Name, page=1 }) 

这是指以访问ContractController这个方法:

public ViewResult List(string user, int page = 1) 
{ 
    //snip 
} 

我的路线是:

routes.MapRoute(
    null, 
    "Page{page}", 
    new { Controller = "Contract", action = "List" } 
); 

routes.MapRoute(
    null, 
    "Page{page}", 
    new { Controller = "Contract", action = "List", user = "", page = 1 } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

的现在链接将返回404错误,因为它无法在控制器'Home'中找到操作'List',o显然意味着它没有使用第一条路线。

一切工作之前,我试图参数添加到ActionLink的,所以基本上,我究竟做错了什么?

非常感谢。

+0

FYI:你还有一个问题,因为你的第一个和第二路由不能对传入的请求进行区分。第二个应该处理的所有请求(以及输出链接)将由第一个完成。 – 2012-08-04 08:24:40

+0

目前一切似乎都正常。对于其中一条路线是多余的,我并不感到惊讶,我仍然试图让我的头脑绕行!如果前两条路线换了一圈,它会有所作为吗? – XN16 2012-08-04 09:36:09

回答

1

亚历克斯,

你绝对正确完成所有其他位,但是ActionLink的具有丢失的参数,试试这个为你的ActionLink:

@Html.ActionLink("Contracts", "List", "Contract", 
      new { User.Identity.Name, page = 1 }, null) 

添加null作为最终参数( htmlAttributes)是所有的对你的思念在这种情况下(有9个重载Html.ActionLink,所以很容易错过正确执行)。

+0

非常感谢,这正是问题所在!我真的需要尝试和理解路由系统,迄今为止我学习中最困难的部分! – XN16 2012-08-01 21:46:57

+0

没有担心亚历克斯,另一个静物小奥秘解决了。嗯,现在是为了更大的一个,生命的意义! :-) – 2012-08-02 09:00:37