0

グループの値に応じてコントローラーを作成したいので、次のルートがあります。

routes.MapRoute(
     name: "Default",
     url: "{group}/{action}",
     defaults: new { group = "Default", action = "Index" }
).RouteHandler = new MyRouteHandler();

次の routehandler と httphandler を使用:

public class MyRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MyHttpHandler(requestContext);
    }
}

public class MyHttpHandler : IHttpHandler
{
    RequestContext _requestContext;

    public MyHttpHandler(RequestContext requestContext)
    {
        _requestContext = requestContext;
    }

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        var groupName = _requestContext.RouteData.GetRequiredString("group");

        // Select the controller, e.g. Home:

        _requestContext.RouteData.Values.Add("controller", "Home");

        IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
        IController controller = factory.CreateController(_requestContext, "Home");
        if (controller != null)
        {
            controller.Execute(_requestContext);
        }
    }
}

これはすべて機能しますが、ページに @Html.ActionLink("Index", "Index") を配置すると、次のリンクが生成されます。

[a href="/?controller=Home"]インデックス[/a]

Html.ActionLink を使用するときにコントローラー引数が追加される理由を教えてもらえますか? (controller=Home 引数をリンクに追加したくありません。)

どうもありがとうございました!

4

1 に答える 1

0

考えられる解決策

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

@Html.ActionLink("Index", "Index", new {group = "Group"});
于 2013-03-10T19:22:10.493 に答える