我正在研究一个umbraco项目,这是一个非常陡峭的学习曲线,特别是对于v7和mvc似乎没有太多好的文档。
我使用带有查询字符串的ling构建了一个简单的项目列表,其中包含分页和排序。不是特别好。我想找到一种方法来制作所有这些客户端,以及umbraco中的选项和最佳实践。
感谢任何帮助。
提前致谢
理查德
答案 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合作,我认为这是一款非常强大的产品。