Декларативный язык XSL (подобный) как представление MVC над моделью строгой типизации?

StackOverflow https://stackoverflow.com/questions/301314

  •  08-07-2019
  •  | 
  •  

Вопрос

Как большой поклонник XSL, я очень рад использовать xsl в качестве представления в нашей собственной среде MVC на ASP.NET.Объекты в модели сериализуются «под капотом» с помощью сериализатора xml .NET, и мы используем довольно атомарные шаблоны xsl, чтобы объявить, как должен преобразоваться каждый объект или свойство.

Например:

  <xsl:template match="/Article">
    <html>
      <body>
        <div class="article">
          <xsl:apply-templates />
        </div>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="Article/Title">
    <h1>
      <xsl:apply-templates />
    </h1>
  </xsl:template>

  <xsl:template match="@*|text()">
    <xsl:copy />
  </xsl:template>

Этот механизм позволяет нам быстро переопределять шаблоны сопоставления по умолчанию, например, сопоставление шаблонов для последнего элемента в списке или выбранного элемента и т. д.Кроме того, объекты расширения xsl в .NET дают нам лишь немного дополнительного контроля, который нам нужен.Общие общие шаблоны можно разделить и включить.

Однако

Несмотря на то, что я могу игнорировать недостаток многословия xsl (потому что схема Visual Studio intellisense + фрагменты действительно хороши, хвала команде VS), обратная сторона отсутствия intellisense над объектами со строгой типизацией в модели действительно меня беспокоит.

Я видел пользовательские элементы управления ASP.NET MVC + в действии, и мне это действительно начало нравиться, но мне интересно;

Есть ли способ получить какой-то интеллект над XML, который мы повторяем, или вы знаете язык, который предлагает свободу и декларативность XSL, но имеет преимущества строгого типа/интеллектуального подхода, например, webforms/usercontrols/asp.net .mvc-просмотр?

(Наверное, я знаю ответ:«нет», и скоро я буду использовать совершенно крутой mvc shizzle Фила Хаака...)

Это было полезно?

Решение

Вы можете использовать сериализованную (xml) форму своих объектов и редактировать ее с помощью XML-редактора VS. (Я использую VS2008).

Затем свяжите схему xsd с этим XML-документом.Используйте схему, созданную самим xsd,exe и используемую при сериализации/десериализации.

Вы увидите, что получаете IntelliSense бесплатно.!

Более того, если вы отредактируете схему и добавите

    <xs:annotation>
      <xs:documentation>
        Helpful Explanation.
      </xs:documentation>
    </xs:annotation>

тогда редактор XML не только предложит вам возможные имена и значения элементов или атрибутов, но также появится «Полезное объяснение». для каждого из них, данные аннотации которого введены в схему XML.

Чтобы узнать, как связать схему XML с документом XML, найдите локальная помощь VS2008 или найдите его в MSDN онлайн, или прочитайте это здесь.

Надеюсь, это помогло.

Ваше здоровье,

Димитр Новатчев

Другие советы

Это не по теме, но, пройдя путь создания CMS с xsl(t) и вызванной болью, я бы порекомендовал asp.net mvc по другим причинам, кроме intellisense.Но это приятно.

Изначально я использовал xsl, чтобы отделить представление от данных, что и произошло.Но дизайнерам было очень трудно, главным образом потому, что для них все это выглядело как HTML.Дополнительные угловые скобки и т. д.И я постоянно вел разговор: «А почему я не могу иметь документ с все в этом"

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

С тех пор, как мы перешли на MVC, мы действительно не оглядывались назад, есть даже возможность создать свой собственный движок просмотра, если вы действительно любите приключения.Таким образом, вы можете оставить немного xsl там, где почувствуете необходимость.

На самом деле уже существует проект на основе этого в MVCContrib библиотеки.

Надеюсь, это поможет вашему решению

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top