Используйте razor / asp.net mvc3 для создания статических html-страниц?

Для одного проекта я должен создать статические HTML-страницы, которые будут опубликованы на удаленном сервере.

Я хочу автоматизировать создание этих файлов из кода C #, который берет данные из базы данных SQL Server.

Данные будут меняться не часто (каждые 4-5 месяцев), и этот сайт будет часто посещаться.

Поскольку я считаю, что бритвенный синтакс из asp.net MVC3 очень эффективен, мне было интересно, можно ли использовать asp.net MVC3 / Razor для генерации этих HTML-страниц?

Так:

Is this a good idea? If yes, what is the good way? If you think to another good manner of doing it, which way?

Спасибо вам за помощь

Edit

Что касается ответов, мне нужно уточнить: я не хочу / не хочу использовать веб-кэширование по многим причинам (загрузка (миллионы страниц загружаются каждый месяц), интеграция (мы интегрируем нашу страницу в оптимизированном Apache с помощью, другая часть веб-сайта), количество страниц (кэширование поможет мне только в том случае, если я много раз прохожу одни и те же страницы, но у меня будет ~ 2500 страниц, что соответствует закону Мерфи, за исключением случаев, когда я ставлю очень высокое значение. тайм-аут, мне придется часто их генерировать). Поэтому я действительно ищу что-то для генерации HTML-страниц.

Edit 2 Я только что получил новое ограничение: / Эти шаблоны должны быть локализованы. Это означает, что у меня должно быть что-то эквивалентное следующему коду бритвы:@MyLocalizationFile.My.MyValue

Edit 3 В настоящее время я думаю о создании динамического веб-сайта и вызову некоторый http-запрос для сохранения сгенерированного HTML-кода. НО, есть ли способ избежать http? значение моделирует HTTP-вызов, указывает выходной поток и вызываемый URL (только с вызовом GET).

Наши предыдущие показатели загрузки были действительно недооценены, на самом деле их посещают чуть более миллиона раз в день, ~ 14 миллионов загрузок страниц в день.

 Krunal06 июл. 2012 г., 19:29
Я согласен с вами, хранение статического HTML является наиболее эффективным способом и в большинстве случаев гораздо лучше, чем использование кэширования вывода или другого механизма кэширования.
 Steve Hiner04 апр. 2013 г., 19:10
Недавно я слышал о DocPad, который в основном выполняет то, о чем вы спрашиваете, за исключением того, что это не ASP.Net или Razor. Я хотел бы, чтобы был продукт ASP.Net/MVC3/Razor, такой как DocPad. Я думаю, что есть место для использования движка динамического рендеринга для создания статического сайта. Я работаю с несколькими сайтами, которые выиграют от этой идеи. Когда вы делаете обновление, вы обновляете сайт и либо снова загружаете весь сайт, либо используете diff, чтобы отфильтровать файлы, которые изменились, и загрузить их.

Ответы на вопрос(6)

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

http://www.juliencorioland.net/Archives/en-aspnet-mvc-custom-output-cache-provider

 J4N25 июн. 2012 г., 16:41
~ 2500 веб-страниц, это официальный сайт, который предоставляет доступ к элементам законов на 5 языках. Кеширование это не то, что мне нужно.

SP.NET + DB + CMS) в промежуточной среде, а затем я использую wget для его сканирования и генерирования статических HTML-страниц. Эти статические HTML-страницы, включая ресурсы, затем загружаются в Amazon S3 Bucket. Таким образом, сайт становится полностью статичным, без каких-либо зависимостей.

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

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

Yes it is. Even when you can cache the results, HTML pages will be always faster and use lower server resources A good way is to transform your razor views into text and then save the text as a html file. Another way can be using T4 templates, but I recommend Razor.
 J4N25 июн. 2012 г., 16:44
Ваш пункт 2. интересен. Есть ли способ иметь контроллер и визуализировать эти бритвы из консольного приложения?
 06 июл. 2012 г., 19:43
Вы думаете, полезно ли это ..awesome.codeplex.com/…
 06 июл. 2012 г., 19:34
@ J4N У тебя получилось? Я также заинтересован решить аналогичную проблему, с которой я сталкиваюсь, когда я также ищу хранение статических html-страниц, созданных для сайта, созданного на asp.net mvc3. Обновите здесь, если вы нашли решение ... спасибо

NuGet-ссылкаихВеб-сайт), Таким образом, вы можете создавать шаблоны из консольного приложения без использования asp.net MVC.

Я использую это следующим образом:

public string ParseFile<T>(string fileName, T model) {
    var file = File.OpenText(fileName);
    var sb = new StringBuilder();
    string line;
    while ((line = file.ReadLine()) != null)
    {
        // RazorEngine does not recognize the @model line, remove it
        if (!line.StartsWith("@model ", StringComparison.OrdinalIgnoreCase))
            sb.AppendLine(line);
        }
        file.Close();

        // Stuff to make sure we get unescaped-Html back:
        var config = new FluentTemplateServiceConfiguration(
                    c => c.WithEncoding(RazorEngine.Encoding.Raw));

        string result;
        using (var service = new TemplateService(config))
        {
            return service.Parse<T>(sb.ToString(), model);
        }
    }
}
 J4N26 июн. 2012 г., 14:18
Кажется, это действительно близко к тому, о чем я думал. Позвольте мне несколько дней, чтобы проверить это :)
 25 июн. 2012 г., 18:19
Да, смотрите мои изменения.
 J4N25 июн. 2012 г., 16:45
Есть ли способ использовать файлы шаблонов (cshtml) с этими решениями?
 J4N26 июн. 2012 г., 14:28
Только один вопрос, с этим, шаблоны работают? А частичный вид? Потому что у меня будет более 60% моих взглядов, которые никогда не изменятся
 26 июн. 2012 г., 20:30
Хороший вопрос, я не пробовал частичные, и я не думаю, что это будет работать, так как движок основан на строках, а не на файлах, как бритва в MVC
Решение Вопроса

создав нормальный веб-сайт asp.net MVC, а затем сгенерировал страницу, перейдя на страницу с WebClient.

Таким образом, у меня может быть предварительный просмотр веб-сайта, и я могу пользоваться всей мощью помощников Razor + MVC.

 19 мая 2013 г., 17:48
Можете ли вы добавить пример в код этого?

что вместо генерации статических HTML-страниц было бы лучше каждый раз динамически генерировать страницы, но с использованием кэширования для повышения производительности.

См. Эту статью о кэшировании с ASP.NET MVC3 для получения дополнительной информации:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

 25 июн. 2012 г., 16:40
@ J4N Поскольку кеширование, скорее всего, является очевидным решением вашего вопроса, я бы отредактировал ваш вопрос, указав, что вы не хотите использовать кеширование, чтобы избежать больше ответов, связанных с кэшированием.
 J4N25 июн. 2012 г., 16:38
Я хорошо знаю о кешировании, но это не то, о чем я спрашиваю. Я просто не могу. Наши веб-страницы будут интегрированы в гораздо больший веб-сайт (работающий на Apache).

Ваш ответ на вопрос