我想创建一个包含子博客的博客。每个子博客都会在模型中拥有自己的“主题”变量,这将改变主题。我尝试将主题变量传递给_ViewStart.vbhtml页面,如下所示:
@code
@((@ViewBag.Theme.length > 0) ? Layout = @ViewBag.Theme : Layout = "~/Views/Shared/_Layout.vbhtml") End Code
然而,我收到错误:
描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。
编译器错误消息:BC30201:预期的表达式。
来源错误:
第5行:* @第6行:第7行:@((@ ViewBag.Theme.length> 0)?布局= @ ViewBag.Theme:布局= “〜/ Views / Shared / _Layout.vbhtml”)第8行:第9行:结束代码
源文件:C:\ Users \ darchual \ documents \ visual studio 2010 \ Projects \ GemcoBlog \ GemcoBlog \ Views_ViewStart.vbhtml行:7
如何更改模板,有更好的方法吗?
答案 0 :(得分:0)
尝试
@{
Layout = (ViewBag.Theme.length > 0) ? ViewBag.Theme : "~/Views/Shared/_Layout.vbhtml"
}
正如警告一样,如果theme为null,则length将失败。可以做得更好
@{
Layout = !String.IsNullOrWhiteSpace(ViewBag.Theme) ? ViewBag.Theme : "~/Views/Shared/_Layout.vbhtml"
}
修改:仅为了记录,是的,在您链接的答案(stackoverflow.com/questions/5059323)中设置不同的视图是更好和正确的方法,但只是要注意你是否想要坚持你的方法这对我有用:
@{
Layout = !String.IsNullOrWhiteSpace((String)ViewContext.ViewData["Theme"]) ? (String)ViewContext.ViewData["Theme"] : "~/Views/Shared/_Layout.cshtml";
}