MVC路由问题,区域和HTML动作链接

时间:2012-07-27 16:28:24

标签: asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-areas

我已经寻找了一段时间,解决方案看起来应该可行,看起来我做错了。

我创建了一个用于管理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。

2 个答案:

答案 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”,我需要在这里和我的区域路由注册中添加名称空间,因为我在两个区域使用相同的类名。