0

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

我创建了一个用于管理 CMS 端的区域,称为“管理”,因此如果您访问:

/管理/Vinyard

它将为您提供使用 CRUD 脚手架构建的 VinyardController 管理的 vinyards 列表。

在“前端”我有一个浏览控制器和另一个 VinyardController 用于查看 vinyard 的详细信息。

所以有人去

/浏览/葡萄园

它给了他们一个 Vinyards 列表,他们点击一个(这是问题所在)我想要它去

/Vinyard/NameOfVinyard

我的路线是:

      routes.MapRoute(
            "Vinyard",
            "Vinyard/{Name}",
            new { controller = "VinyardController", action = "Details", area="root"}
            );

高于默认路由。Details 是显示 Vinyard 详细信息的方法。

我使用的 HTML.actionlink 是:

 @Html.ActionLink(item.Name, "Details", "vinyard" ,new { name = item.VinyardId, area="root" })

出于某种原因,返回的 a 标签是:/Browse/Details?Length=7

最重要的是,当我尝试浏览到 /vinyard/1 时,它给了我一个 404。

谢谢你的帮助!

更新:如果我浏览到 /vinyard/details/1 它可以正常工作,除了我希望它避开 /details/ 部分。

4

2 回答 2

1

使用这个重载

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)
于 2012-07-27T16:31:15.873 回答
0

修复。使用 Shyju 修改后的操作链接,但我还删除了 area 属性,并且必须修复地图路由以使其正常工作。

我的 global.ascx 现在看起来像这样:

        routes.MapRoute(
            "Vinyard",
            "Vinyard/{id}",
            new { controller = "Vinyard", action = "Details", id=UrlParameter.Optional},
            new[] { "MyNameSpace.Controllers" }
            );

这两个问题是:我的控制器名称需要是“Vinyard”而不是“VinyardController”,并且我需要在此处和我的区域路由注册中添加名称空间,因为我在两个区域中使用相同的类名。

于 2012-07-29T02:36:12.160 回答