2011-09-06 29 views
1

我已經知道了一個非常簡單的Sitecore問題,但是我對ASP.NET並不熟悉,並且希望能給出任何幫助。下面是LayoutMain.aspx文件的一部分,毫不奇怪,它是我運行網站的大多數頁面的主要佈局文件。在ASPX佈局中迴應sitecore項目名稱

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LayoutMain.aspx.cs" Inherits="Company.Website.Layouts.LayoutMain" %> 
<%@ Import Namespace="Company.Business"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <!-- LayoutMain --> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 
    <title><sc:FieldRenderer FieldName="item" runat="server" /></title> 

我想補充一個ID和一些類的屬性到<html>標籤。這將通過整個站點的CSS給我細粒度的樣式控制,而不必在.aspx文件中搞亂!

我想要從Sitecore\Home的第一個子級別獲取ID屬性,並使用class屬性包含當前項目名稱和當前項目模板項目名稱。這將導致這樣的事情:

<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class="big-boxes product"> 

在當前產品的主要CMS樹Sitecore\Home\shop\boxes\big-boxes並具有product

非常感謝提前的模板。

回答

2

我想你可以簡單地做這一行:

<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class='<%# Sitecore.Context.Item.Name + Sitecore.Context.Item.Template.Name %>'> 

我希望幫助。

編輯:

記住一個Databind();添加到Page_Load方法來獲取綁定的數據。

你可以使用相同的原理使id成爲動態的。

+0

非常感謝您的回覆,不幸的是,這隻會導致:'' –

+0

是的,肖恩說了什麼。你在這裏沒有輸出,因爲<%# %>是一個「數據綁定表達式」,你不是數據綁定。 <%= %>是通用的「內聯表達式」。輸出必須是一個字符串。 – Bryan

0

要獲得身份證,您需要沿着當前物品的祖先走回去,直到找到有家的父母的物品,這會爲您提供商品物品。

理想情況下,您應該在代碼隱藏而不是ASPX內聯中執行此操作。你說你不熟悉ASP.NET,如果你遇到麻煩,請添加評論,看看是否有人可以進一步幫助。

在你的ASPX:

<html xmlns="http://www.w3.org/1999/xhtml" id="Html" runat="server" > 
在後面的代碼,即在LayoutMain.aspx.cs文件

然後:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Html.ID = GetHtmlID(); 
    Html.Attributes["class"] = GetHtmlClass(); 
} 

protected string GetHtmlID() 
{ 
    Sitecore.Data.Items.Item currentItem = Sitecore.Context.Item; 

    while (currentItem.Parent != null && currentItem.Parent.Name != "Home") 
    { 
     currentItem = currentItem.Parent; 
    } 

    return (currentItem.Parent.Name == "Home") ? currentItem.Name : String.Empty;    
} 

protected string GetHtmlClass() 
{ 
    return string.Format("{0} {1}", Sitecore.Context.Item.Name, Sitecore.Context.Item.Template.Name); 
} 

這裏的GetHtmlID方法將嘗試找出它有一個祖先作爲家長的家(例如商店)。如果它不能,那麼你最終將沒有ID,或者你可以改變這個String.Empty來輸入一個默認ID。

請注意,這會直接將Home模板名稱硬編碼到您的代碼中,理想情況下,最好將其移入配置中,或者使用不會更改的Home項目的Sitecore ID與Parent.ID進行匹配。不過,我想這將是罕見的,你會重命名你的家庭項目。

+0

這看起來很棒,完全像_The Right Way™_這樣做,但直到我可以訪問後面的代碼,我將不得不解決第一個答案。謝謝! – lukescammell

+0

如果您確實需要正確設置ID,則仍然可以將該代碼直接放入ASPX文件。看看[這裏](http://msdn.microsoft.com/en-us/library/k6xeyd4z.aspx)和[這裏](http://www.codeproject.com/KB/aspnet/InlineCodeVSCodeBehind.aspx)for有關將代碼直接放入您的ASPX文件的更多信息。這不是最佳實踐,但它會在一個緊要關頭。 – Kasaku