Отделите шаблон пейджера ng-table от страницы *.cshtml и повторно используйте, когда это необходимо.

Я использую ngTable для отображения данных в моем проекте ASP.net MVC. В этой директиве я используйте шаблон пейджера, как показано ниже.

Вот шаблон разбиения на страницы.

 <!-- Pager Template -->
        <script type="text/ng-template" id="custom/pager">
            <ul class="pager ng-cloak">
                <li ng-repeat="page in pages"
                    ng-class="{'disabled': !page.active, 'previous': page.type == 'prev', 'next': page.type == 'next'}"
                    ng-show="page.type == 'prev' || page.type == 'next'" ng-switch="page.type">
                    <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo; Previous</a>
                    <a ng-switch-when="next" ng-click="params.page(page.number)" href="">Next &raquo;</a>
                </li>
                <li>
                    <div class="btn-group btn-group-sm">
                        <button type="button" ng-class="{'active':params.count() == 10}" ng-click="params.count(10)" class="btn btn-default">10</button>
                        <button type="button" ng-class="{'active':params.count() == 25}" ng-click="params.count(25)" class="btn btn-default">25</button>
                        <button type="button" ng-class="{'active':params.count() == 50}" ng-click="params.count(50)" class="btn btn-default">50</button>
                        <button type="button" ng-class="{'active':params.count() == 100}" ng-click="params.count(100)" class="btn btn-default">100</button>
                    </div>
                </li>
            </ul>
        </script>

Мой вопрос: как я могу отделить его от файла *.cshtml и использовать, когда он нужен, для других страниц? В этот момент я снова и снова использую один и тот же блок кода на каждой странице. Поэтому, если вы можете смоделировать свое решение на Plunk, это очень ценно.


person Sampath    schedule 03.10.2014    source источник


Ответы (1)


как насчет этого

Расширение контроллера .cs

public static class ControllerExtension
{
    public static string RenderRazorViewToString(this Controller cont, string viewName, object model)
    {
        cont.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(cont.ControllerContext,
                                                                     viewName);
            var viewContext = new ViewContext(cont.ControllerContext, viewResult.View,
                                         cont.ViewData, cont.TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(cont.ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }


    public static ContentResult NgTemplate(this Controller cont, string viewPath)
    {
        return new ContentResult()
        {
            Content = RenderRazorViewToString(cont,viewPath, null),
            ContentEncoding = Encoding.Default,
            ContentType = "text/ng-template"
        };
    }
}

метод RenderRazorViewToString был взят из Визуализация представления в виде строки
ваш шаблон

PaginationTemplate.cshtml

<ul class="pager ng-cloak">
      ...
    </ul>

затем контроллер asp net mvc, например

HomeКонтроллер

public ActionResult Template()
    {
        return this.NgTemplate("PaginationTemplate");
    }

а затем в каком-то виде, например

Индекс.cshtml

...     
<table ng-table="tableParams" template-pagination="'/Home/Template'" class="table">
...

Примечание

не забудьте указать ссылку на действие в одинарных кавычках, здесь ' url '

person Kostia Mololkin    schedule 09.10.2014