2012-06-01 44 views
2

我正在嘗試使用Razor模板生成.aspx頁面作爲輸出。我沒有運氣看在文檔中如何做到這一點。 Page和名稱空間聲明打破了模板:使用Razor模板生成.aspx頁面

<%@ Page Language="C#" Title="@Page.Metadata.browser_title" %> 
<%@ Import Namespace="System.Xml" %> 

這些都導致此錯誤:

TemplateCompileException:CS1501:沒有重載方法 '寫' 取0參數號線27列1:寫();

我認爲這是因爲使用C#語法的Razor模板使得兩個衝突,因爲上面的聲明使用「@」。有沒有辦法讓它們一起工作,以便Razor模板可以在模板運行後在渲染產品中使用C#生成輸出?上面的示例還顯示瞭如何將「標題」的值呈現出模板。

+1

你爲什麼要這樣做? – SLaks

+0

由於Tridion創作者的Razor調解者似乎並沒有出現在SO中,我建議在他的博客上詢問他:http://www.codedweapon.com/ –

+0

它首先會經歷一個名爲Tridion的內容管理系統,其中頁面上的內容由非開發人員輸入。我以前一直在使用DWT,但我正在研究使用Razor的概念驗證,以便在佈局模板中使用更靈活的選項。 Razor/C#運行模板代碼,但生產服務器上的頁面上也有C#,因爲該網站基於.net,並使用主頁面,用戶控件等。 – user1408652

回答

6

<%中的@ s是無效的Razor語法。
您需要通過編寫<%@@來避開它們。

+0

非常感謝您,這樣做的竅門!我在猜測語法來解決它時嘗試了@<%@和@ {<%@ ...}。再次感謝! – user1408652

+0

@ user1408652如果工作正常,請考慮將其標記爲接受的答案。 –

1

您可以編寫一個C#TBB在所有Razormediator模板之後添加標籤,如果您可以在默認完成操作之後添加標籤(如果您使用的話),則可以更好。

快速和骯髒的示例代碼...

Item OutputItem = package.GetByName(Package.OutputName); 
    string OutputText = OutputItem.GetAsString(); 

    // Page tag declaration.. 
    string pagePretags = @"<<TWO LINES OF DECLARATIONs..>>" 
    string FinalOutputText = pagePretags + OutputText ; 

    OutputItem.SetAsString(FinalOutputText); 

希望這有助於..

2

如果你像剃刀,也許你應該看看DD4T(http://code.google.com/ p /動態遞送-4-的tridion /)。它允許你使用帶有Razor視圖的ASP.Net MVC構建一個網站。