プロジェクトでエリアを使用しています。また、この修正プログラムを使用してページ名のダッシュを置き換えます。MVC3ページ名にダッシュを使用する方法
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new HyphenatedRouteHandler())
);
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
この修正プログラムは通常のトップレベルページで正常に動作します。ホーム/一部ページ。 しかし、それはエリアになるともはや機能しません。私はAreaRegistration.csファイルをGlobal.asax.csルートに相当するものに変更しようとしましたが、それもうまくいきませんでした。私は[ActionName( "some-page")]でページの名前を変更できますが、コントローラにまだArea/some_folder/some-pageの下線が付いている問題は解決しません。
編集: 私はダーリンディミトロフというルートを使用し、私はこのエラーを取得する提案:
複数のタイプが「ページ」という名前のコントローラーと一致していることが分かりました。これは、このリクエストを処理するルート( 'admin/{controller}/{action}/{id}')が要求に一致するコントローラを検索するための名前空間を指定していない場合に発生します。このような場合は、 'namespaces'パラメータを取る 'MapRoute'メソッドのオーバーロードを呼び出してこのルートを登録します。
は、我々は、セグメントの観客にターゲットに同じ名前が異なるコンテンツを持つ複数の「セグメント」を持っている
これは私がそれを書き直したもので、動作していないようです。私は404を取得します。私はまだ名前に_を使用している間にページにアクセスできますが、 - バージョンによって404が表示されます。 – ddilsaver
実際にはエラーが発生します。私はあなたがそれを見ることができるように投稿を編集しています。 – ddilsaver
@ddilsaverでは、複数の領域で同じコントローラーが定義されているように見えます。これらの競合を解決するには、名前空間の制約を使用する必要があります。私はこれを達成する方法を説明するために投稿を更新しました。 –