2013-05-13 136 views
1

在ASP.NET MVC 4中,我想知道如何为我生成链接。Asp.Net MVC 4路由和链接生成

设想一个简单的控制器3点的操作,每次取一个整数参数 “的requestId”,例如:

public class HomeController : Controller 
{ 
    public ActionResult Index(int requestId) 
    { 
     return View(); 
    } 

    public ActionResult About(int requestId) 
    { 
     return View(); 
    } 

    public ActionResult Contact(int requestId) 
    { 
     return View(); 
    } 
} 

和该登记路径(缺省路由之前):

routes.MapRoute(
    name: "Testroute", 
    url: "home/{action}/{requestId}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

我拨打我的索引视图使用http://localhost:123/home/index/8

在此视图上,我呈现其他两个操作的链接:

@Html.ActionLink("LinkText1", "About") 
@Html.ActionLink("LinkText2", "Contact") 

现在我希望MVC呈现此链接包括“的requestId”当前路由值,就像这样:

http://localhost:123/home/about/8 
http://localhost:123/home/contact/8 

,但我得到这些链接(不放慢参数):

http://localhost:123/home/about 
http://localhost:123/home/contact 

...但不使用索引动作,如果我将指定一个:

@Html.ActionLink("LinkText3", "Index") 

我想避免的是用这种方式显式地指定参数:

@Html.ActionLink("LinkText1", "Contact", new { requestId = ViewContext.RouteData.Values["requestId"] }) 

当我移动动作之前的RequestID参数放慢参数它就像我希望,但我不想动它:

routes.MapRoute(
    name: "Testroute", 
    url: "home/{requestId}/{action}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

有人能解释我这种行为吗?我怎样才能得到这个工作,没有明确指定参数?

+0

我有同样的问题的requestId为可选。 :\ – 2013-06-27 18:09:45

回答

0

InController: 更换INT可空INT

对于路由: 集路由

routes.MapRoute(
    name: "Testroute", 
    url: "home/{action}/{requestId}", 
    defaults: new { controller = "Home", action = "Index" ,requestId=RouteParameter.Optional } 
); 
+0

不幸的是,当我调用http:// localhost:123/home/index/8时,行为仍然相同。我除了在所有链接中包含请求参数“8”外。 – martinoss 2013-12-19 13:17:24