13

私はMVC(およびASP.Netルーティング)が初めてです。*.aspxというコントローラーにマップしようとしていますPageController

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

上記のコードは *.aspx を にマップしませんPageControllerか? これを実行して任意の .aspx ページに入力すると、次のエラーが表示されます。

パス '/Page.aspx' のコントローラーが見つからないか、IController インターフェイスを実装していません。パラメータ名: controllerType

私がここでやっていないことはありますか?

4

5 に答える 5

6

私は自分の質問に答えただけです。ルートを逆にしました(デフォルトはページの上でした)。以下、正しい順番です。これにより、次の質問が発生します...「デフォルト」ルートはどのように「ページ」ルートと一致するのでしょうか (ここでは正規表現を使用していると思います)。

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
于 2008-08-15T03:54:03.080 に答える
6

私は自分の質問に答えただけです。ルートを逆にしました(デフォルトはページの上でした)。

ええ、すべてのカスタム ルートをデフォルト ルートの上に配置する必要があります。

これにより、次の質問が発生します...「デフォルト」ルートはどのように「ページ」ルートと一致するのでしょうか (ここでは正規表現を使用していると思います)。

デフォルト ルートは、Convention over Configuration と呼ばれるものに基づいて一致します。Scott Guthrie は、ASP.NET MVC に関する彼の最初のブログ投稿で、これについて詳しく説明しています。それと彼の他の投稿を読むことをお勧めします。これらは最初の CTP に基づいて投稿されたものであり、フレームワークが変更されていることに注意してください。Scott Hanselman による asp.net サイトの ASP.NET MVC に関する Web キャストも見つけることができます。

于 2008-08-15T04:24:44.190 に答える
1

Rob Conery の MVC Storefrontスクリーンキャストの 1 つで、彼はまさにこの問題に遭遇しました。気になる方は23分あたりからどうぞ。

于 2008-08-15T04:27:58.410 に答える
0

コントローラーがどのように見えるかわかりません。エラーは、コントローラーが見つからないという事実を示しているようです。PageController クラスを作成した後、Controller を継承しましたか? PageController は Controllers ディレクトリにありますか?

これがGlobal.asax.csの私のルートです

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

Controllersフォルダーにある私のコントローラーは次のとおりです。

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
于 2008-08-15T03:43:38.110 に答える
0
public class AspxRouteConstraint : IRouteConstraint
{
    #region IRouteConstraint Members

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values["aspx"].ToString().EndsWith(".aspx");
    }

    #endregion
}

すべての aspx のルートを登録する

  routes.MapRoute("all", 
                "{*aspx}",//catch all url 
                new { Controller = "Page", Action = "index" }, 
                new AspxRouteConstraint() //return true when the url is end with ".aspx"
               );

そして、 MvcRouteVisualizerでルートをテストできます

于 2011-01-30T01:41:16.560 に答える