Стратегия маршрутизации ASP.NET MVC для статического содержимого для каждого представления - PullRequest
3 голосов
/ 13 января 2010

Я хочу, чтобы каждое представление в моей системе имело статический справочный контент. То, как я думал об этом, было бы установить параллельную структуру для статического контента и создать маршрут для переписывания URL-адреса. Например:

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

... где входящий URL для "/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" }
                    );

, который отправляет URL справки по адресу:

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

... и затем назвал страницы справки как "Account_Create.aspx". Это кажется наиболее эффективным способом справиться с этим с помощью MVC.

1 Ответ

0 голосов
/ 13 января 2010

Я бы начал с того, что он будет работать с выделенным контроллером, так как это, вероятно, наименее болезненный подход, и маршрут должен быть относительно простым для написания (хотя вам необходимо убедиться, что включен маршрут / Help * выше маршрут контроллера по умолчанию, в противном случае маршрут контроллера по умолчанию, скорее всего, будет совпадать.

Я не уверен, что среда выполнения asp.net может обслуживать страницы .htm, поэтому я не знаю, можно ли заставить систему работать так, как вы изначально предполагали. Может быть лучше создать отдельный поддомен или виртуальный каталог для содержимого справки и использовать метод расширения помощника html, чтобы сгенерировать URL справки из значений маршрута, доступных в помощнике html, так как таким образом вы не добавляете никакой нагрузки в asp. net runtime, запрашивая ответ на запросы статического контента (и вы уменьшаете количество скачиваемого контента, не требуя куки и т. д.).

...