ASP.NET MVC路由策略,用于每个View的静态内容

时间:2010-01-13 15:37:02

标签: asp.net-mvc url-rewriting url-routing

我希望系统中的每个视图都有一些静态帮助内容。我考虑这样做的方式是为静态内容建立一个并行结构,并创建一个路由来重写URL。例如:

/Controllers
/Help
  /Account
    /Login.htm
    /Create.htm
/Models
/Views
  /Account
    /Login.aspx
    /Create.aspx

...“/Account/Create/Help”的传入网址将投放“/Help/Account/Create.htm”。如何将其添加到Global.asax:RegisterRoutes(RouteCollection)

或者,最好用专用的控制器和动作来处理它 - 例如:

public class HelpController : Controller
{
    public ActionResult Help(string controller, string action)
    {
        return FileContentResult(GetContent("Help/" + controller + "/" + action));
    }
}

还是其他方式?


我最后添加了一条路线:

        routes.MapAsyncRoute(
                    "Help",
                    "{helpController}/{helpAction}/help",
                    new { controller = "Help", action = "Help" }
                    );

将帮助网址发送到:

    public ActionResult Help(string helpController, string helpAction)
    {
        return View(helpController + "_" + helpAction);
    }

...然后将帮助页面命名为“Account_Create.aspx”。这似乎是使用MVC处理此问题的最有效方法。

1 个答案:

答案 0 :(得分:0)

我首先要使用专用控制器,因为这可能是最不痛苦的方法,并且路由应该相对简单(尽管你需要确保包含/帮助路由上面默认控制器路由,否则默认控制器路由很可能匹配。

我不确定asp.net运行时是否可以提供.htm页面,所以我不知道你是否能让你的系统按照你最初的设想运行。为帮助内容创建单独的子域或虚拟目录可能更好,并使用html帮助扩展方法从html帮助程序中可用的路由值生成帮助URL,因为这样您不会向asp添加任何负载。 net运行时通过要求它响应静态内容的请求(并减少因不需要cookie等而下载的内容)。