在 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"] })
当我在 action 参数之前移动 requestId 参数时,它会像我期望的那样工作,但我不想移动它:
routes.MapRoute(
name: "Testroute",
url: "home/{requestId}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
有人可以向我解释这种行为吗?如何在不明确指定参数的情况下使其工作?