有选择地替换Razor中的内容

时间:2012-10-19 17:45:25

标签: asp.net-mvc razor content-management-system

是否有可能在Razor中做这样的事情:

@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>标记。我希望有这样聪明的东西。

2 个答案:

答案 0 :(得分:2)

Html.CMSContent(“..”)返回什么?你可以将这个助手的返回值存储到变量中,然后检查调用是否返回了数据库值,如果是这样,显示内容是否会显示默认文本?这里有一些快速代码,我所描述的不确定它是否在你的情况下100%工作,因为你没有指定帮助者返回的内容

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

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

答案 1 :(得分: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是最好的方法。