14

ASP.NETMVC2RC2上に構築された大規模な既存のアプリケーションがあります。

私のリンクはすべて次のようになります:htp // site / controller / action / id

BigBirdというエリアを追加しました。

BigBirdエリアにいるとき、すべてのリンクは次のようになります。htp:// site / BigBird / controller / action / id

問題は、これらのコントローラー/アクションが私の新しいエリアに存在しないことです。したがって、アプリケーション全体のすべてのアクションリンクを調べて、次のルート値を入力する必要があります:area = string.empty

これを回避する方法はありますか?

4

2 に答える 2

12

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

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

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

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

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
于 2010-03-08T18:59:56.640 に答える
0

できることは 2 つのうちの 1 つです。コントローラー/アクションを適切な領域に移動/コピーするか、新しい領域にいくつかの新しいコントローラーを作成するか (これが私が推奨するアプローチです)、または新しい領域をルートに強制するカスタム ルートを作成することができます (これは私が推奨する方法です)。領域を持つという目的全体が無効になるため、お勧めしません):

routes.MapRoute(
    "BigBird_Override",                                             
    "BigBird/{controller}/{action}/{id}",                          
    new { area = String.Empty }
);
于 2010-02-27T06:17:51.497 に答える