2011-03-04 36 views
5

有沒有辦法讓我在Spark View Engine中使用類似於所謂的Global Variables的功能,但對於Razor。Razor中的全局變量查看引擎

它的所有內容都可以在標題的一個部分中定義一個變量,然後可以在其他部分稍後設置或更改該變量的值。

火花,你會在一節中創建的變量有點像這個(例如目的不完整的代碼):

<html> 
    <head> 
    <global type='string' Title='"Site Name"'/> 
    <title>${Title}</title> 
    </head> 
    <body> 
    <div><use content="view"/></div> 
    </body> 
</html> 

然後你可以將其設置在不同的視圖或區,或是:

<set Title='product.Name + " - " + Title'/> 

我會如何在剃刀上做這樣的事情,或者如果我有錯誤的方法解決類似的問題?

回答

7

你可以使用ViewBag.Title裏面的佈置:

<html> 
    <head> 
    <title>@ViewBag.Title - Site Name</title> 
    </head> 
    <body> 
    <div> 
     @RenderBody() 
    </div> 
    </body> 
</html> 

,然後定義視圖內部的變量:

@model AppName.Models.Product 
@{ 
    ViewBag.Title = Model.Name; 
} 

UPDATE:

上有關評論的問題繼您可以使用部分的默認值。

<html> 
    <head> 
    <title> 
    @if (IsSectionDefined("Title")) 
    { 
     RenderSection("Title") 
    } 
    else 
    { 
     <text>Some default title</text> 
    } 
    </title> 
    </head> 
    <body> 
    <div> 
     @RenderBody() 
    </div> 
    </body> 
</html> 

,然後你的視圖中,你可以重新定義部分,如果你會:

@section Title { 
    <text>some redefined title here</text> 
} 
+0

這似乎是工作,但似乎如果我在佈局中設置標題的值(例如,如果我想有一個默認的),然後在視圖中「更改」它,它保持第一個值的設置。現在,如果我沒有在佈局上設置它,它將在視圖上設置值。任何想法如何解決這個問題?謝謝! – bluediapente 2011-03-04 14:28:19

+0

@Lilitu88,請參閱我的關於「IsSectionDefined」和「RenderSection」方法的更新。 – 2011-03-04 14:32:57

+2

在這種情況下,部分不是必需的。你可以在視圖中使用下面的表達式:@(ViewBag.Title ??「Default Title」)' – marcind 2011-03-05 06:40:49

相關問題