是否有可能在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>
标记。我希望有这样聪明的东西。
答案 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是最好的方法。