2012-10-19 40 views
0

是否有可能做這樣的事情在剃刀:在剃刀更換內容選擇性

@using(Html.CMSContent("TermsOfService")) 
{ 
    <text> 
     <!-- Some default content goes here if the "TermsOfService" 
      item doesn't exist in my content table in the database --> 
    </text> 
} 

當視圖正在處理,如果CMSContent助手沒有找到一些名爲「TermsOfService」內容項數據庫表我已經設置好了,它會輸出默認的內容。

否則,它會用數據庫中的內容替換默認內容?

我試圖構建一個CMS /應用程序混合,以便市場部可以覆蓋我的應用程序中的文本,如果他們想要的話。

CLARIFY

我這樣做的原因是爲了使代碼無比輕鬆地讀取和寫入。我將最終得到這些小塊內容,所以我希望儘量減少開發人員爲了獲得這個功能而需要輸入的內容。

我也期待99%的時間,默認的文本是什麼顯示。但我希望在不需要重新部署應用程序的情況下快速更改一些文本的情況下處理1%的情況。因此,讓默認文本儘可能接近其上下文是非常重要的(即,我不希望開發人員必須跳到不同的文件才能看到默認文本 - 也不必跳轉到頂部頁)。

例如,當您執行@using(Html.BeginForm())時,它會自動發出開始和結束<form>標記。我希望有這樣聰明的東西。

+0

是否有任何理由不把這個邏輯放在控制器中? –

+0

只是想盡可能地保持默認內容儘可能接近頁面的上下文。閱讀Razor視圖並查看默認文本可以更容易瞭解頁面的外觀,而不是跳轉到控制器。 – Ryan

回答

0

我想我想通了,我一直在尋找。它採用if而不是using

if(!Html.CMSContent("TermsOfService")) 
{ 
    <text> 
      Default content goes here 
    </text> 
} 

對於幫手:

public static bool CMSContent(this HtmlHelper Html, string BlockName) 
{ 
    if (blockname in database) 
    { 
     var blockdata = (retrieve from database); 
     Html.ViewContext.HttpContext.Response.Write(blockdata); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

} 

雖然我不知道使用的Response.Write是做到這一點的最好辦法。

2

Html.CMSContent(「..」)返回什麼?您能否將此幫助程序的返回值存儲到變量中,然後檢查該調用是否返回了數據庫值(如果有)顯示內容,否則顯示默認文本?這裏是什麼,我形容不知道,如果它在你的工作的情況下100%的一些快速的代碼,因爲你沒有指定你的助手返回

@{ 
     var terms = Html.CMSContent("TermsOfService"); 
} 

@if (terms != null && terms != "") { 
     @terms 
} else { 
     @: Default Terms of Service 
} 
+0

抱歉不清楚。 CMSContent功能的主體(或粗略草圖)就是我所要求的 - 它現在不存在。 – Ryan