3

これが簡単な状況です...

次のURLを機能させようとしています...

http://localhost:57732/Power-Drills/DeWalt

次のコントローラーを定義しています...

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {    
        public ActionResult PowerDrills(string brandName)
        {
           ...
        }

        public ActionResult ProductLine(Int64 id)
        {
           ...
        }

    }
}

global.asaxで、次のルートを定義しました...

public static void RegisterRoutes(RouteCollection routes)
{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "PowerDrill",
        url: "Power-Drills/{brandName}",
        defaults: new { controller = "Product", action = "PowerDrills", brandName= "RYOBI" },
        namespaces: new[] { "MvcApplication1.Controllers" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

}

次のエラーが発生します...「「Product」という名前のコントローラーに一致するタイプが見つかりませんでした。「」

したがって、Productコントローラーが見つからないことを示しているように見えますが...このURLは(デフォルトルートを使用して)正常に機能し、Productコントローラーによって処理されます...

http://localhost:57732/Product/ProductLine/4

ルーティングについて読み、URLセグメント、それらがコントローラーとアクションにどのようにマップされるか、global.asaxでの順序がどのように重要であるかを理解しました(少なくとも私はそう思います)。私は他の人のためにこの問題に関する以前のいくつかの投稿を見て読んだことがありますが、それらの解決策は私の状況に機能または適用されていません(Ruby for Railsの投稿がたくさんあります)。

この投稿は、Controllerクラスが「ApiController」ではなく「Controller」から継承する必要があることを指摘しています。これは、ご覧のとおり、私のものです。

だから私は何が起こっているのかわからないので、どんなガイダンスも歓迎します!

ありがとうございました、

-G

4

1 に答える 1

1

そこから名前空間を削除し、おそらくルートを次のようにフォーマットする方がよいと思います。

routes.MapRoute(
        "PowerDrill",
        "Power-Drills/{brandName}",
        new { controller = "Product", action = "PowerDrills", brandName = UrlParameter.Optional }
);

ルートをどのようにフォーマットしたか (名前空間など) についてはよくわかりませんが、これは MVC 3 で行ったことです。

PowerDrillルートをそれに置き換えてみてください。

Robert Harveyが言ったように、Phil Haack のルート テスターは、他のすべてが失敗した場合に役立ちます。

于 2012-07-02T15:29:40.180 に答える