我在使用Preview 5创建ActionLink时遇到问题。我能找到的所有文档都描述了旧的通用版本。
我正在页面/作业上的作业列表上构建链接。每个工作都有一个guid,我想构建一个指向/ jobs / details / {guid}的链接,这样我就可以显示有关该工作的详细信息。我的作业控制器有一个索引控制器和一个细节控制器。详细信息控制器需要一个guid。我试过这个
<%= Html.ActionLink(job.Name, "Details", job.JobId); %>
然而,这给了我的网址“/ jobs / details”。我在这里缺少什么?
在你的帮助下解决了。
路线(在全能路线之前添加):
routes.Add(new Route("Jobs/Details/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new
{
controller = "Jobs",
action = "Details",
id = new Guid()
}
});
行动链接:
<%= Html.ActionLink(job.Name, "Details", new { id = job.JobId }) %>
html锚点中的结果:
http://localhost:3570/WebsiteAdministration/Details?id=2db8cee5-3c56-4861-aae9-a34546ee2113
所以,它令人困惑的路线。我在网站管理员之前移动了我的工作路线定义,现在可以使用了。显然,我的路线定义是SUCK。我需要阅读更多的例子。
旁注,我的链接没有显示,并且快速表没有工作(无法快速观察匿名类型的表达式),这使得更难以弄清楚这里发生了什么。事实证明,由于一个非常小的错字,行动链接没有显示出来:
<% Html.ActionLink(job.Name, "Details", new { id = job.JobId })%>
那会再次让我感动。
答案 0 :(得分:3)
试一试:
<%= Html.ActionLink(job.Name, "Details", new { guid = job.JobId}); %>
其中“guid”是路线中参数的实际名称。这指示路由引擎要将job.JobId属性的值放入路由定义的guid参数中。
答案 1 :(得分:1)
您是否在Global.asax.cs文件中定义了处理此问题的路由?默认路由为{controller} / {action} / {id}。您正在传递“JobID”,框架不会自动映射到“id”。您需要将其更改为job.id或定义路由以明确处理此案例。