21

以下を使用して、メニューをパーシャルアクションからレイアウトに直接レンダリングしています。

@Html.Action(MVC.Menu.Index())

このアクションは、レンダリングするメニュー部分を決定します。たとえば、パブリックメニューの一部です。これらのパーシャル内で、リンクをレンダリングするためにT4MVCも使用しています。

<ul id="navHolder">
<li class="level1">
    <ul class="mainMenu">
        <li><b>@Html.ActionLink("Welcome", MVC.Home.Index())</b>
           ... 

何らかの理由で、T4MVCによってレンダリングされたURLには、末尾に「?Area=」が含まれています。

 <ul id="navHolder">
    <li class="level1">
        <ul class="mainMenu">
            <li><b><a href="/home/index?Area=">Welcome</a></b>
               ...

プロジェクトに領域がなく、「IncludeAreasToken」設定をfalseに設定しました。奇妙なことに、これは「@Html.Action」を使用してパーシャルをレンダリングした場合にのみ発生します。「@Html.Partial」としてプルした場合、パラメーターはレンダリングされず、リンクはクリーンで正しいです。(私はそれを部分的にレンダリングしたくないので、提案としてそれを提供しないでください;)

誰かが前にこれに遭遇しましたか?

4

3 に答える 3

30

この問題を非常に簡単な方法で解決します。次のように、空のエリアルートにないすべてのルートに追加するだけです。

routes.MapRoute(
"Default",
"{controller}/{action}/{i​d}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });
于 2011-12-19T11:21:52.507 に答える
10

ここで何か奇妙なことが起こっています。根底に何らかの MVC バグがあるのではないかと思います。T4MVC を使用しなくても、次のように記述した場合に発生します。

@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null)

通常のビューでは、これは偽の ?Area= を生成しませんが、Html.Action 呼び出しでは生成します。チームの誰かに尋ねる必要があります。

現時点では、t4mvc.tt の次の行 (行 310 付近) を削除することで回避できます。

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #> 
于 2011-07-20T06:23:26.297 に答える