Создаем первое приложение на NancyFX. Часть пятая. Super Simple View Engine

    В предыдущей статье Создаем первое приложение на NancyFX. Часть четвертая. Продолжаем работу с модулями мы продолжали изучение модулей. В данной статье мы изучим идущий с Nancy из коробки графический движок Super Simple View Engine.

    Итак, давайте создадим новый модуль:

    using Nancy;
    
    namespace NancyFxApplication
    {
        public class ViewModule : NancyModule
        {
            public ViewModule() : base("/views")
            {
                Get["/"] = param => View["View.html"];
            }
        }
    }
    

    И добавим в корень нашего проекта файл View.html, который будет иметь следующий вид

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Super Simple View Engine Rule!</title>
    </head>
    <body>
        <h1>Hello! I'm super Simple View Engine!</h1>
    </body>
    </html>
    

    Запустим приложение и получим следующий результат:



    Nancy поддерживает следующие соглашения по размещению и наименованию файлов для представлений:
    • Файл представления может быть размещен в корне проекта.
    • Файл представления может быть размещен в папке Views
    • Файл может быть размещен в папке с именем модуля, которая в свою очередь находится в папке Views
    • Файл может находиться в корне папки модуля
    • Файл может иметь имя как у модели и находиться где угодно в проекте
    • Также размещение файла можно указать вручную или же определить Ваше собственное соглашение о размещении представления

    Можно указывать название файла без расширения, Nancy просто выберет первый попавшийся файл представления с именем переданным во View.

    Теперь когда мы разобрались с размещением файлов представлений давайте более детально рассмотрим Super Simple View Engine.
    Super Simple View Engine использует синтаксис аналогичный синтаксису Razor. Вы можете найти проект на GitHub перейдя по ссылке Super Simple View Engine. SSVE не поддерживает вложенные коллекции. При отображении сложных типов данных гораздо эффективнее использовать Razor.

    Итак, теперь используем фэйковый репозиторий из прошлой статьи для получения данных. Код репозитория выглядит следующим образом:

    using System.Collections.Generic;
    
    namespace NancyFxApplication
    {
        public static class DishesRepository
        {
            public static List<Dish> Dishes = new List<Dish>
                    {
                        new Dish { Id=1, Name = "Porridge", IsSpicy = false, Ingridientses = new List<Ingridients>{new Ingridients{Id = 1, Name = "Porridge"}}},
                        new Dish {Id = 2, Name = "Chili", IsSpicy = true},
                        new Dish {Id = 3, Name = "Icecream", IsSpicy = false},
                        new Dish {Id = 3, Name = "Taco", IsSpicy = false},
                        new Dish {Id = 3, Name = "Burito", IsSpicy = true}
                    };
    
            public static List<Dish> GetAllDishes()
            {
                return Dishes;
            }
    
            public static void AddDish(Dish dish)
            {
                Dishes.Add(dish);
            }
        }
    }
    

    Модифицируем модуль ViewModule:

    using System.Collections.Generic;
    using Nancy;
    
    namespace NancyFxApplication
    {
        public class ViewModule : NancyModule
        {
            public ViewModule() : base("views")
            {
                Get["/"] = param =>
                    {
                        List<Dish> dishes = DishesRepository.GetAllDishes();
                        return View['View.html', dishes];
                    };
            }
        }
    }
    


    И в свою очередь модифицируем представление

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Super Simple View Engine Rule!</title>
    </head>
    <body>
        <h1>List of dishes:</h1>
        <ul>
            @Each
                <li>@Current.Name</li>
            @EndEach
        </ul>
    </body>
    </html>
    


    Запустим наше приложение и получив следующий результат.



    Движок представлений предоставляет возможности использования операторов @If, однако, хочется заметить, что вложенные операторы SSVE не поддерживаются. Также есть возможность добавления Partial View.

    В заключении еще раз хочется добавить, что использование SSVE только в случаях когда надо отобразить простые данные, для отображения сложных типов рекомендуется использовать другие движки представлений.

    В следующей завершающей цикл статье речь пойдет о тестировании приложений под NancyFX. Жду отзывов и комментариев.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 1
    • 0

      Спасибо за хороший обзор, прочитал всю серию статей.


      Насчёт встроенного шаблонизатора — это конечно какое-то сплошное разочарование:


      • работает на регулярках
      • нельзя вложенные Each
      • не умеет else в if’ах

      Надо сразу прикручивать Razor и не мучать себя.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.