/ / Умбрако, клієнтська сторінка сторінки та замовлення - ajax, asp.net-mvc, umbraco

Пасуванці та замовлення "umbraco clientside" - ajax, asp.net-mvc, umbraco

Я працюю над проектом umbraco, який був дуже крутою кривою навчання, але, здається, немає багато хорошої документації навколо v7 та mvc зокрема.

Я створив простий список елементів ізрозбиття та упорядкування за допомогою ling із рядками запиту. Не особливо приємно. Я хочу розробити спосіб, як зробити все це клієнтом, і які варіанти та найкращі практики є в межах umbraco.

Будь-яка допомога вдячна.

Спасибі заздалегідь

Річард

Відповіді:

0 для відповіді № 1

Існує багато способів зробити це, ось простий. Підводячи підсумок, я рекомендую використовувати "поверхневий контролер", який викликається ajax, а потім маніпулюю вашим 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);
}
});
}

Помітьте URL-адресу для публікації в Ajax"/ Umbraco / Surface /", контролери, які ви створюєте, розширюють "Umbraco.Web.Mvc.SurfaceController", будуть доступні там. Дуже зручно для дзвінків в аякс. Цей javascript не дозволить вашій сторінці вимагати перезавантаження, зберігаючи речі клієнтів, але все ж використовуючи серверну сторону для отримання потрібного вмісту. Звідси ви можете додати багато функціональності та перевірок.

Ось кнопка сторінки:

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

Сподіваюся, це допоможе вам працювати з Umbraco, я думаю, що це дуже потужний продукт.