umbraco客户端分页和订购

时间:2014-02-27 10:46:37

标签: ajax asp.net-mvc umbraco

我正在研究一个umbraco项目,这是一个非常陡峭的学习曲线,特别是对于v7和mvc似乎没有太多好的文档。

我使用带有查询字符串的ling构建了一个简单的项目列表,其中包含分页和排序。不是特别好。我想找到一种方法来制作所有这些客户端,以及umbraco中的选项和最佳实践。

感谢任何帮助。

提前致谢

理查德

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,这里有一个简单的方法。总之,我建议使用ajax调用的“Surface Controller”,然后相应地操作你的DOM。

这是一个示例表面控制器(我在那里有一堆无用的东西......):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
using System.Net;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Configuration;
using System.IO;
using Newtonsoft.Json;
using System.Text;
using Umbraco.Web; // AncestorOrSelf
using Umbraco.Core; // FindIndex
using Umbraco.Core.Models;

namespace MyFunWebsite.SurfaceControllers
{
    public class MyFunSCController : Umbraco.Web.Mvc.SurfaceController
    {   
        [System.Web.Mvc.HttpPost]
        public ActionResult GetPage() {

            // Pick up params
            var pageNumber = -1;
            if (!int.TryParse(Request.Params["pageNumber"], out pageNumber))
            {
                pageNumber = -1;
            }

            var parentNodeId = -1;
            if (!int.TryParse(Request.Params["parentNodeId"], out parentNodeId))
            {
                parentNodeId = -1;
            }

            if (parentNodeId == -1 || pageNumber == -1)
            {
                return Content("no - invalid parentNodeId or pageNumber");
            }

            var itemsPerPage = 10;

            var parentNode = Umbraco.TypedContent(parentNodeId);

            var nodes = parentNode.Children.Skip(itemsPerPage * pageNumber).Take(itemsPerPage);

            ViewBag.specialViewBagInformation = "Fun with Umbraco";
            ViewBag.nodes = nodes;

            return PartialView("Partials/MyListingOfNodes");

        }
    }
}

那部分观点是这样的:

@using Umbraco.Core;    
@{
    var nodes = (IEnumerable<IPublishedContent>)ViewBag.nodes;
    foreach (var node in nodes) {
        <div>title: @node.AsDynamic().title</div>
    }
}

现在你的普通模板,似乎已经拥有的模板也可以调用这个部分模板。该模板还必须根据每页的计数和项目以及内容显示页面按钮。但基本上,当一个页面按钮运行时,你运行一些类似于这个的javascript:

function GetPage(pageNumber, parendNodeId) {
    $.ajax({
        type: "POST",
        url: "/Umbraco/Surface/MyFunSCController/GetPage/",
        data: "pageNumber=" + pageNumber + "&parentNodeId=" + parentNodeId,
        cache: false,
        dataType: "text",
        success: function (result) {
            $("#myFunTable").html(result);
        },
        error: function (result) {
            // console.log("Ajax error: " + result);
        }
    });
}

注意ajax帖子“/ Umbraco / Surface /”的url,你创建的扩展名为“Umbraco.Web.Mvc.SurfaceController”的控制器将在那里访问。非常方便的ajax调用。这个javascript将阻止您的页面需要重新加载,保持客户端,但仍然使用服务器端来获取您想要的内容。从这里你可以添加很多功能和验证。

这是一个页面按钮:

<a href="javascript: void(0);" onclick="GetPage(3, Model.Content.Id)">Page 3</a>

希望这有助于您与Umbraco合作,我认为这是一款非常强大的产品。