Бритва. ASP.NET MVC 3. Динамически создавать страницы / контент - PullRequest
2 голосов
/ 19 января 2012

Проблема для меня состоит в том, чтобы понять, как отображать динамически созданные страницы с уникальными URL-адресами, когда на странице нет контроллера / представления для сопоставления. Я строю CMS-систему в ASP.NET MVC 3 3 с Razor. В базе данных я храню структуру страницы / сайта и содержание.

Полагаю, мне нужно иметь какое-то действие рендеринга в контроллере, чтобы создать собственное представление с контентом из базы данных? а как насчет URL?

1 Ответ

2 голосов
/ 19 января 2012

Я бы создал отдельную папку (например, «DynamicContent» или что-то в этом роде) для хранения этих динамических страниц и добавил бы соответствующий IgnoreRoute вызов метода RegisterRoutes в Global.asax.cs, например:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("DynamicContent/{*pathInfo}");

    ...
}

После этого пользователи смогут получить доступ к этим страницам, используя такие URL-адреса, как

http://%your_site%/DynamicContent/%path_to_specific_file%

ОБНОВЛЕНИЕ

Если вы не хотитечтобы положить файлы на жесткий диск сервера, вы можете создать специальный контроллер для этих файлов.Маршрут для этого должен выглядеть следующим образом:

public static void RegisterRoutes(RouteCollection routes)
{
    ...

    routes.MapRoute(
        "DynamicRoute", // Route name
        "Dynamic/{*pathInfo}", // URL with parameters
        new { controller = "Dynamic", action = "Index"} // Parameter defaults
    );

}

Ваш DynamicController.cs должен выглядеть следующим образом:

public class DynamicController : Controller
{
    public ActionResult Index(string pathInfo)
    {
        // use pathInfo value to get content from DB
        ...
        // then 
        return new ContentResult { Content = "%HTML/JS/Anything content from database as string here%", ContentType = "%Content type either from database or inferred from file extension%"}
        // or (for images, document files etc.)
        return new FileContentResult(%file content from DB as byte[]%, "%filename to show to client user%");
    }
}

Обратите внимание, что звездочка (*) перед pathInfo заставит этот маршрут захватить всю часть URLпосле Dynamic - поэтому, если вы ввели http://%your_site%/Dynamic/path/to/file/something.html, то в параметр pathInfo будет передана целая строка *1024* в метод DynamicController / Index.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...