我希望系统中的每个视图都有一些静态帮助内容。我考虑这样做的方式是为静态内容建立一个并行结构,并创建一个路由来重写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处理此问题的最有效方法。
答案 0 :(得分:0)
我首先要使用专用控制器,因为这可能是最不痛苦的方法,并且路由应该相对简单(尽管你需要确保包含/帮助路由上面默认控制器路由,否则默认控制器路由很可能匹配。
我不确定asp.net运行时是否可以提供.htm页面,所以我不知道你是否能让你的系统按照你最初的设想运行。为帮助内容创建单独的子域或虚拟目录可能更好,并使用html帮助扩展方法从html帮助程序中可用的路由值生成帮助URL,因为这样您不会向asp添加任何负载。 net运行时通过要求它响应静态内容的请求(并减少因不需要cookie等而下载的内容)。