我已经寻找了一段时间,解决方案看起来应该可行,看起来我做错了。
我创建了一个用于管理CMS端的区域,名为“manage”,所以如果你去:
/ Manage / Vinyard
它将为您提供使用使用CRUD脚手架构建的VinyardController进行管理的vinyards列表。
在“前端”我有一个浏览控制器和另一个VinyardController,用于查看vinyard的细节。
所以有人去了
/ Browse / Vinyard
它给了他们一个Vinyards列表,他们点击一个(这是问题)我希望它去
/ Vinyard / NameOfVinyard
我的路线是:
routes.MapRoute(
"Vinyard",
"Vinyard/{Name}",
new { controller = "VinyardController", action = "Details", area="root"}
);
高于默认路线。详细信息是显示Vinyard详细信息的方法。
我正在使用的HTML.actionlink是:
@Html.ActionLink(item.Name, "Details", "vinyard" ,new { name = item.VinyardId, area="root" })
由于某种原因,返回的标签是:/ Browse / Details?Length = 7
最重要的是,当我尝试浏览/ vinyard / 1时,它给了我一个404。
感谢您的帮助!
更新:如果我浏览/ vinyard / details / 1它可以正常工作,除了我希望它避开/ details / part。
答案 0 :(得分:1)
使用此overload
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
Object routeValues,
Object htmlAttributes
)
所以将代码更改为
@Html.ActionLink(item.Name, "Details", "vinyard" ,
new { name = item.VinyardId, area="root" },null)
答案 1 :(得分:0)
修正了它。使用Shyju修改后的操作链接,但我也删除了区域属性,并且必须修复地图路由才能使其正常工作。
我的global.ascx现在看起来像这样:
routes.MapRoute(
"Vinyard",
"Vinyard/{id}",
new { controller = "Vinyard", action = "Details", id=UrlParameter.Optional},
new[] { "MyNameSpace.Controllers" }
);
这两个问题是:我的控制器名称需要是“Vinyard”而不是“VinyardController”,我需要在这里和我的区域路由注册中添加名称空间,因为我在两个区域使用相同的类名。