0

私はこれをしばらく探していましたが、解決策はうまくいくように見えますが、間違っているようです。

「manage」という CMS 側を管理するための領域を作成しました。

/管理/ヴィンヤード

CRUD スキャフォールドで構築された VinyardController を使用して管理するヴィンヤードのリストが表示されます。

「フロント エンド」には、ブラウズ コントローラーと、ヴィンヤードの詳細を表示するための別の VinyardController があります。

だから誰かが行く

/ブラウズ/ヴィンヤード

それは彼らにヴィンヤードのリストを与えます、彼らは1つをクリックします(ここに問題があります)私はそれを行きたいです

/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" })

何らかの理由で返されるタグは次のとおりです: /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 の変更されたアクション リンクで作業しますが、エリア プロパティも削除し、正しく機能するようにマップ ルーティングを修正する必要がありました。

私の global.ascx は次のようになります。

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

2 つの問題は、コントローラー名を「VinyardController」ではなく「Vinyard」にする必要があり、両方の領域で同じクラス名を使用していたため、ここと領域のルート登録に名前空間を追加する必要があったことです。

于 2012-07-29T02:36:12.160 に答える