Подтвердить что ты не робот

Использование Underscore.js с ASP.NET

Я сравнивал разные механизмы шаблонов JavaScript, чтобы узнать, какая из них дает мне лучшую производительность для больших наборов данных. Один, с которым я столкнулся, - Underscore.js. Однако я не смог получить ни один из примеров работы. Мой шаблон выглядит так:

<% _.each(projects(), function(project) { %>
   <tr>
      <td><%= project.code %></td>
      <td><%= project.request %></td>
      <td><%= project.stage %></td>
      <td><%= project.type %></td>
      <td><%= project.launch %></td>
   </tr>
<% }) %>

Однако, когда я запускаю страницу, я получаю исключение ASP.NET на стороне сервера, поскольку он пытается скомпилировать текст в тегах <% ... %>:

Compiler Error Message: CS1026: ) expected
Line 826:                     <% _.each(projects(), function(project) { %>

Мне не удалось найти способ избежать этих тегов, и я не смог найти способ настроить Underscore для использования другого синтаксиса. Есть ли обходной путь, или Underscore и ASP.NET просто несовместимы друг с другом?

4b9b3361

Ответ 1

Такая же проблема с JSP, поэтому мы делаем это:

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,      // print value: {{ value_name }}
                      evaluate    : /\{%([\s\S]+?)%\}/g,   // excute code: {% code_to_execute %}
                      escape      : /\{%-([\s\S]+?)%\}/g}; // excape HTML: {%- <script> %} prints &lt;script&gt;

Это позволит вам использовать все различные версии тегов: интерполяция, оценка и экранирование.

Ответ 2

<% - теги, используемые asp.net. Поэтому, когда страница анализируется, она пытается интерпретировать их, но asp.net не понимает синтаксис, поскольку он ожидает код С#, а не javascript.

Вы можете изменить символы интерполяции в шаблонеSettings на что-то вроде { } и {{ }}

_.templateSettings = {
  interpolate : /\{\{(.+?)\}\}/g
  evaluate : /\{(.+?)\}/g; 
};

var template = _.template("Hello {{ name }}!");
template({name : "Mustache"});
=> "Hello Mustache!"

Документация


FYI, это настройки по умолчанию:

// By default, Underscore uses ERB-style template delimiters, change the
// following template settings to use alternative delimiters.
_.templateSettings = {
  evaluate    : /<%([\s\S]+?)%>/g,
  interpolate : /<%=([\s\S]+?)%>/g,
  escape      : /<%-([\s\S]+?)%>/g
};

Ответ 3

заменить:

<% }) %>

изменить для:

<% }); %>

Удачи!!!