Asp.Net MVC 4路由和链接生成
问题描述:
在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" }
);
有人能解释我这种行为吗?我怎样才能得到这个工作,没有明确指定参数?
答
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
我有同样的问题的requestId为可选。 :\ – 2013-06-27 18:09:45