Использование jTemplate с ASP.NET MVC

В В этой статье Дэйв Уорд описывает, как использовать подключаемый модуль jQuery jTemplate для создания того, что он вызывает «повторитель на стороне клиента», который анализирует данные JSON в шаблон на стороне клиента.

Ближе к концу статьи он предлагает поместить шаблон в отдельный файл с расширением «.tpl», а данные загружать в документ со следующим синтаксисом:

function ApplyTemplate(jsonData) {
  // This method loads the HTML template and
  //  prepares the container div to accept data.
  $('#Container').setTemplateURL('myTemplate.tpl');

  // This method applies the JSON array to the 
  //  container's template and renders it.
  $('#Container').processTemplate(jsonData);
}

Однако при использовании ASP.NET MVC я не могу просто поместить файл шаблона рядом с моим представлением и вызвать его с помощью «/Guestbook/myTemplate.tpl». Но я хотел бы разместить файл шаблона рядом с представлением, чтобы все было вместе.

Как мне это устроить? Действие контроллера, которое возвращает содержимое текстового файла? Некоторая конфигурация в Global.asax.cs, чтобы Framework просто возвращал эти файлы как есть, без синтаксического анализа URL-адреса контроллера / действия? Есть другие идеи?


person Tomas Aschan    schedule 29.01.2009    source источник


Ответы (2)


Я бы предложил вместо этого использовать .htm. Это нормально в приложении MVC по умолчанию.

Оказывается, использование .tpl в любом случае - плохая идея, поскольку некоторые версии IIS блокируют его как файл неизвестного типа, если вы явно не добавите его. Мне нужно обновить свой пост.

person Dave Ward    schedule 29.01.2009
comment
Нормально будет сделать. Тем временем я использовал тег сценария с type = text / html с шаблоном, а затем получил доступ к нему с помощью $ (scriptTagId) .html (). Однако метод .setTemplate () не смог его проанализировать - не тогда, когда я жестко закодировал его значение в js ... Это должна быть одна строка? Что я сделал не так? - person Tomas Aschan; 29.01.2009
comment
Я считаю, что для использования встроенных шаблонов вам нужно использовать setTemplateElement ('ElementId'). - person Dave Ward; 30.01.2009
comment
Я пробовал это, но безуспешно. Js работает полностью, и при отладке я нахожу все значения в порядке, но содержимое не обновляется. У меня есть ‹textarea id = postListTemplate name = postListTemplate class = jTemplate› и (#gbPostList) .setTemplateElement ('postListTemplate'); Любые идеи? Спасибо за помощь! - person Tomas Aschan; 30.01.2009
comment
Неважно, теперь он работает! Оказалось, что мой шаблон не был указан так, как должен был быть. Для будущих искателей этого вопроса: встроенный элемент шаблона должен быть текстовым полем и иметь свойство id, указанное в js (имя не имеет значения). Его можно скрыть в css с помощью display: block; Спасибо! - person Tomas Aschan; 30.01.2009

Я думаю, вы могли бы просто проигнорировать маршрут и связать свой файл шаблона, как вы предложили:

Посмотрите этот предыдущий ответ: Как игнорировать маршрут в asp .net формирует маршрутизацию URL

person Lewis    schedule 29.01.2009
comment
Спасибо за ссылку! Я сохранил свой шаблон как в ~ / Views / Guestbook / postListTemplate.htm и добавил в свой Global.asax.cs следующее: ‹pre› routes.IgnoreRoute (Views / Guestbook / PostListTemplate.htm); ‹/pre› Однако , Я получаю ошибку 404 при попытке открыть страницу в firefox. Что я делаю неправильно? - person Tomas Aschan; 29.01.2009