2014-02-27 93 views
0

我正在開發一個umbraco項目,這是一個非常陡峭的學習曲線,對於v7和mvc來說,似乎沒有太多好的文檔。umbraco客戶端分頁和訂購

我已經建立了一個簡單的項目列表與分頁和排序使用查詢字符串ling。不是特別好。我想制定一個方法來製作所有這些客戶端,以及umbraco中的選項和最佳實踐。

感謝任何幫助。

在此先感謝

理查德

回答

0

有很多方法可以做到這一點,這裏是一個簡單的問題。總之,我建議使用由ajax調用的「Surface Controller」,然後相應地操作DOM。

這裏是一個樣品表面控制器(我有一堆無用usings的存在...):

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> 
    } 
} 

現在Normal模板,似乎已經有的也可以稱爲這部分。該模板還必須基於每個頁面和東西的計數和項目來顯示頁面按鈕。但後來基本上,當一個頁面按鈕運行,在運行一些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 /面/」,控制器創建擴展「Umbraco.Web。 Mvc.SurfaceController「將在那裏訪問。非常方便的Ajax電話。這個JavaScript將阻止你的頁面重新加載,保持客戶端的東西,但仍然使用服務器端獲得你想要的內容。從這裏你可以添加很多功能和驗證。

這裏是一個頁面按鈕:

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

希望這有助於你用一把umbraco工作,我認爲這是一個非常強大的產品。