2012-07-26 180 views
1

我想创建一个包含子博客的博客。每个子博客都会在模型中拥有自己的“主题”变量,这会改变主题。我尝试主题变量传递给_ViewStart.vbhtml页面,如下所示:VB ASP.net MVC Razor:以编程方式更改视图(模板)

@Code

@((@ViewBag.Theme.length > 0) ? Layout = @ViewBag.Theme : Layout = "~/Views/Shared/_Layout.vbhtml") 
    End Code 

但是,我得到一个错误:

说明:该请求提供服务所需资源的编译过程中出现错误。请查看以下具体的错误细节并适当修改您的源代码。

Compiler Error Message: BC30201: Expression expected.

Source Error:

Line 5: *@ Line 6: Line 7: @((@ViewBag.Theme.length > 0) ? Layout = @ViewBag.Theme : Layout = "~/Views/Shared/_Layout.vbhtml") Line 8: Line 9: End Code

Source File: C:\Users\darchual\documents\visual studio 2010\Projects\GemcoBlog\GemcoBlog\Views_ViewStart.vbhtml Line: 7

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

回答

0

尝试,因为

@{ 
    Layout = (ViewBag.Theme.length > 0) ? ViewBag.Theme : "~/Views/Shared/_Layout.vbhtml" 
} 

正如一个警告不过,如果主题为null,则长度将失败。可以更好地做

@{ 
    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"; 
} 
+0

我尝试过,但它给了我一个语法错误的“@ {”它说,“说明:维修本所需资源的编译过程中出现错误请仔细阅读以下具体的错误细节并适当修改您的源代码。“在我的VS2010中,它说:“错误'ViewBag'未被声明,由于它的保护级别,它可能不可访问。” – user1477388 2012-07-26 15:27:11

+0

@ user1477388对不起,只是注意到你试图从无法访问ViewBag的_ViewStart中执行它。您可以使用PageData(如http://stackoverflow.com/questions/4834045/how-do-i-set-viewbag-properties-on-viewstart-cshtml中所示)或将其声明在页面的顶部(包括哪里ViewBag.Title通常被声明)。 – Manatherin 2012-07-26 15:30:17

+0

@ user1477388在http://stackoverflow.com/questions/6578029/why-cant-viewstart-cshtml-access-the-viewbag-object中显示的另一种替代方法。您可能可以通过'ViewContext.ViewData [“Theme”]访问它' – Manatherin 2012-07-26 15:34:24

相关问题