7

「'MemberRoute' という名前のルートがルート コレクションに見つかりませんでした。パラメータ名: name」というエラーが表示されます。これが私の Global.asax です。

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "MemberRoute",                       // routeName
            "member/{userId}/{pseudoName}", // url
            new
            {                           // url defaults
                controller = "Member",
                action = "Index",
                userId = 0,
                pseudoName = UrlParameter.Optional
            },
            new
            {                          // url constraints
                userId = @"\d+" // must match url {userId}
            }
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

メンバーコントローラー、

public ActionResult Index(int userId, string pseudoName)
    {
        User user;
        var unitOfWork = new UnitOfWork();
        user = unitOfWork.UserRepository.GetById(userId);

        var expectedName = user.PseudoName.ToSeoUrl();
        var actualName = (pseudoName ?? "").ToLower();

        // permanently redirect to the correct URL
        if (expectedName != actualName)
            return RedirectToActionPermanent("Index", "Member", new { id = user.UserId, pseudoName = expectedName });
        return View(user);
    }

発信者、

return RedirectToRoute("MemberRoute", new { userId = user.UserId, pseudoName = user.PseudoName });

ルート名が見つからないのはなぜですか?

4

2 に答える 2

8

これは MVC 4 が原因であり、すべてのカスタム ルーティングは RouteConfig.cs ファイル内の App_Start フォルダーにあることがわかります。Global.asax.cs を開いたとき、RegisterRoutes メソッドがなかったので、自分で追加してカスタム ルートを追加しましたが、機能しませんでした。RouteConfig ファイルが見つかりました。そこには既にありました。デフォルトの RegisterRoutes メソッドは既にセットアップされています。そこにカスタム ルートを追加すると、期待どおりに動作します。

于 2012-06-24T16:02:50.523 に答える