Получить, показать и кэшировать строку из базы данных?

0

В настоящее время я разрабатываю веб-сайт, который позволяет пользователям настраивать различные аспекты.

Я смог загружать, извлекать и кэшировать пользовательские правила CSS, а также изображения, однако строки ускользают от меня. Я использую ASP.net MVC5.

Вот код, который у меня есть до сих пор:

FileController:

[HttpGet]
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Server)]
public ContentResult getString()
{
   string randString = getStringFromDatabase(); //retrieves hard coded string for now
   if (randString != null && randString.Length > 0)
      return Content(randString);
   else
      return null;
}

Затем с этим контроллером я планирую использовать @Url.Action для вызова вышеуказанного метода в FileController и получения строки. Я ранее мог извлекать изображения (поскольку вы добавляете действие url в атрибут src тега img), а также загружаете пользовательский файл CSS (поскольку вы добавляете действие url в атрибут src тега ссылки), оба из них кэшируются с помощью аналогичный код к вышесказанному.

Я достигаю этого с помощью таких изображений:

<img class="navbar-logo" src="@Url.Action( "image", "file", new { name = "Logo.png" })" />

и хотел бы сделать это со строками.

Я попытался использовать функцию jQuery $.get, но затем он не кэширует строку и не загружает строку после каждой загрузки страницы.

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

TL; DR: У меня есть строка, хранящаяся в базе данных. Я хочу получить эту строку через действие бритвы (Url.Action или другие) и показать ее пользователю веб-страницы. Я также хочу его кэшировать. Я могу сделать это с изображениями и css файлами, потому что теги <img> и <link> имеют атрибуты src, но <p>/<span> и другие текстовые элементы этого не делают.

Если вам нужна дополнительная информация, просто дайте мне знать!

  • 0
    Не могли бы вы уточнить, какая часть не делает то, что вы ожидаете?
  • 0
    @DaveParsons Я добавил TL; Dr. Дело не в том, что он не делает то, что я ожидал, я просто не знаю, как добиться желаемого результата :)
Показать ещё 4 комментария
Теги:
razor
asp.net-mvc

1 ответ

0
Лучший ответ

Поэтому я понял это со ссылкой, предоставленной DaveParsons (см. Комментарии по моему оригинальному вопросу).

По сути, мне не нужно было использовать @Url.Action, ответ был @Html.Action:

<h4 id="page-title">@Html.Action("GetTitle", "file", new { type = "pagetitle" })</h4>

Но это возвращало ошибку, говоря, что вы не можете установить местоположение outputcache с дочерним действием, поскольку оно поддерживает только атрибуты Duration, VaryByCustom и VaryByParam. Я пробовал его без места, но попытка сбросить кеш не работала, поэтому я полностью удалил атрибут, и теперь он кэширует заголовок, а также удаляется при его обновлении.

Поэтому мне пришлось создать новый блок кода внутри контроллера:

    [HttpGet]
    public ContentResult GetTitle(string type)
    {
        string titleString = getStringFromByte(this.DataProvider.CustomizationFileManager.LoadCustomizationFile("WebsitePageTitle.txt"));
        if (titleString != null && titleString.Length > 0)
            return Content(titleString);
        else
            return Content("");
    }

Мой ответ кажется немного запутанным (пока еще не был кофе). Поэтому я предоставлю...

TL; DR: используйте @Html.Action. Удалите атрибут [OutputCache] из метода контроллера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню