2012-10-19 63 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