0

是否可以在 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/应用程序混合体,以便营销部门可以根据需要覆盖我的应用程序中的文本。

阐明

我这样做的原因是让代码超级容易阅读和编写。我最终会在所有地方都有这些小内容块,所以我希望尽量减少开发人员必须输入多少才能获得此功能。

我也期待 99% 的时间,默认文本是要显示的内容。但我希望处理 1% 的情况,我们需要快速更改一些文本而无需重新部署应用程序。因此,让默认文本尽可能接近其上下文很重要(即,我不希望开发人员必须跳转到不同的文件来查看默认文本是什么 - 也不必跳转到顶部页)。

例如,当你这样做时,@using(Html.BeginForm())它会自动发出开始和结束<form>标签。我希望有这样聪明的东西。

4

2 回答 2

2

Html.CMSContent("..") 返回什么?您能否将此帮助程序的返回值存储到变量中,然后检查调用是否返回数据库值,如果是则显示内容,否则显示默认文本?这是我描述的一些快速代码

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

 @if (terms != null && terms != "") {
      @terms
 } else {
      @: Default Terms of Service
 }
于 2012-10-19T17:52:59.683 回答
0

我想我知道我在找什么了。它使用 anif而不是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 是最好的方法。

于 2012-10-19T22:08:00.020 回答