9

このコードはマスターページ内にあります:

<li><a href="<%=Url.Action("Action", "Controller") %>">Main site link</a></li>
<li><a href="<%=Url.Action("AreaAction", "AreaController", new {area = "Area"}) %>">Area link</a></li>

エリアリンクに行くまで、すべてのリンクはうまく機能します。私がそこに行くと、メインエリアのすべてのルートが機能しません。

これを修正するには、次のようにします。

<li><a href="<%=Url.Action("Action", "Controller", new {area = ""}) %>">Main site link</a></li>

私の質問は、メインサイトへのすべて, new {area = ""}のリンクで回避する方法はありますか?

サイト上のすべてのリンクにこれがあるのは非常に面倒です。

4

2 に答える 2

11

URLアクションは、リンクの場所に関連しています。つまりnew {area = ""}、Url.Action呼び出しに領域がないことを伝えているのではなく、ルート領域を使用するように伝えているのです。Url.Action呼び出しを省略すると、現在のエリアnew {area = ""}内の指定されたコントローラー内に指定されたアクションのURLを作成しようとします(「エリア」があなたの場合です)。

したがって、サブエリアからルートエリアにリンクする場合は避けられません。

于 2010-02-16T18:19:58.850 に答える
4

標準のMVCメソッドを使用しているかどうかはまだわかりませんが(独自のバージョンを呼び出すためにオーバーライドする場合を除く)ActionLink<TController>、MvcFutureslibで提供されているまたは他の汎用メソッドを使用している場合は可能です。

MvcFuturesメソッドは、を呼び出します。これは、コントローラー上で領域を判別するExpressionHelper.GetRouteValuesFromExpression()ためにを検索します。ActionLinkAreaAttributeしたがって、次のようにメインの「エリア」でコントローラーを装飾できます。

[ActionLinkArea("")]
[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

アクションリンクは、標準の構文を使用して正しく生成する必要があります。

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
于 2010-03-08T19:15:25.537 に答える