2013-12-22 77 views
0

我在我的web應用程序中有一個特定的頁面(sitecore內容項),它由一個sitecore佈局和許多sublayouts組成。其中一個子佈局是一個用戶控件,我希望在點擊某個按鈕後進行刷新。我只希望刷新子頁面佈局,並保持頁面的其他部分保持不變(這裏典型的阿賈克斯情況)。當我的所有sitecore內容項目與我的web應用程序中的整個頁面(帶有sublayouts的佈局)直接相關時,如何使用sitecore完成此操作?在我的情況下,我想使用ajax只返回一個特定的單一sublayout的內容。 sitecore的這種Ajax情況的最佳做法是什麼?我正在使用sitecore 6.5。如何使用Sitecore與ajax進行部分頁面更新?

+0

是需要更新的Sublayout按鈕? –

+0

@mdresser這是一個很好的問題,肯定有助於澄清我的問題。是的,它在相同的子佈局上。 sublayout上有按鈕元素以及一個額外的用戶控件。我只需要更新子佈局內的用戶控件。 – user1431072

回答

2

有許多選項可用於實現異步行爲。這些與Sitecore沒有直接關係,但是,有一些Sitecore特定的事情要注意,我有突出顯示下面。

  1. UpdatePanel控件
    如果要執行一些小事,其中超高速性能是不是一個問題,只是在包裝你的按鈕(和你會喜歡 更新任何其他.NET控件) UpdatePanel Control。您還需要將 a ScriptManager控件放入您的基本佈局中,靠近頂部 <form>元素。 注:使用此方法時,你需要確保你的Sublayout沒有緩存功能,否則你的按鈕將無法正常回傳

  2. 創建您自己的Web服務
    在這種情況下,有許多客戶端框架可用於實現相同的結果。我首選的方法是用jQuery鉤住客戶端按鈕點擊事件,準備一個請求對象,並將其發佈到服務器(獲取更新客戶端所需的信息)。

    以下是一些與Sitecore配合使用的Web服務選項 - 允許您訪問Sitecore.Context和所有後續的Sitecore API。

    1. 創建一個空的ASPX Web窗體,該窗體接受參數作爲查詢字符串。在Page_Load方法中,使用參數進行一些處理並使用Response.Write()直接寫入響應。一個JavaScriptSerializer派上用場序列化到JSON,只是一定要設置Response.ContentType = "text/javascript";

    2. 創建ASMX Web Service[WebMethod]裝飾你的方法(或[WebMethod(EnableSession = true)]如果您需要訪問會話數據)。

    3. 使用MVC控制器(例如:ASP.NET Web Api)來創建一個API。我相信有一些問題需要在Sitecore 6.5中解決,如here所述。

2

由於這全部包含在一個Sublayout中,因此您可以簡單地使用圍繞您的按鈕和usercontrol的標準<asp:UpdatePanel>。在代碼隱藏中,你可以做任何必要的數據綁定/數據檢索來更新usercontrol的內容。

請注意,如果該按鈕位於與內容需要更新的位置不同的子圖層上,只要兩個控件的內容都在<asp:UpdatePanel>之內,就可以使用this question中描述的方法。

在回答您的其他問題:

,這是什麼樣的與Sitecore的AJAX情況的最佳做法是什麼?

對於這類事情,並沒有真正的Sitecore特定的最佳實踐。在這種情況下,任何適用於純ASP.NET的方法都可以與Sitecore一起使用。我上面描述的方法可能是最簡單和最快速的實現,但您也可以通過jQuery和ajax來調用Web服務來加載更新的內容。

7

由於您使用短語「部分頁面更新」,我假設您正在使用UpdatePanel。這與傳統的ASP.NET應用程序沒有什麼不同。您將在服務器端處理程序方法中處理按鈕單擊,修改控件的屬性並讓更新面板處理其餘部分。

如果你沒有使用更新面板,你有幾個選擇取決於你想要達到的目標。

通常情況下,如果你點擊一個按鈕來觸發一個ajax請求,你會發布一些數據回服務器。對於這種情況,您通常會設置一個Web服務來處理數據並返回一些結果。您的服務可以訪問Sitecore數據,但不會使用Sitecore展示引擎。

另一種選擇是向Sitecore頁面發送請求(可能與原始請求相同),但包含查詢字符串參數以觸發不同的設備。您可以將此設備配置爲呈現JSON,XML或HTML片段,而不是普通佈局和子佈局電池。

另一種選擇是使用Sitecore項目Web API。如果你走這條路線,你會有另外一些選擇(以及一些學習曲線)。首先閱讀SDN上的文檔或關於該主題的許多博客文章。

+1

我本來會用獨立的設備選項,並通過jQuery來查詢帶有查詢字符串觸發器的頁面。很好的回答 –

相關問題