VB ASP.net MVC Razor:以编程方式更改视图(模板)

时间:2012-07-26 15:19:59

标签: asp.net-mvc vb.net asp.net-mvc-3

我想创建一个包含子博客的博客。每个子博客都会在模型中拥有自己的“主题”变量,这将改变主题。我尝试将主题变量传递给_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

如何更改模板,有更好的方法吗?

1 个答案:

答案 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";
}