【问题标题】:VB ASP.net MVC Razor: Change View (Template) ProgrammaticallyVB ASP.net MVC Razor:以编程方式更改视图(模板)
【发布时间】:2012-07-26 15:19:58
【问题描述】:

我想创建一个带有子博客的博客。每个子博客在模型中都有它自己的“主题”变量,它会改变主题。我尝试将主题变量传递给 _ViewStart.vbhtml 页面,如下所示:

@代码

@((@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

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

【问题讨论】:

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


    【解决方案1】:

    试一试

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

    只是作为一个警告,如果主题为空,那么长度将失败。可以做得更好

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

    【讨论】:

    • 我试过了,但它在“@{”上给了我一个语法错误它说,“描述:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当地修改您的源代码。”在我的 VS2010 中,它说:“未声明错误 10 'ViewBag'。由于其保护级别,它可能无法访问。”
    • @user1477388 抱歉,刚刚注意到您尝试从无法访问 ViewBag 的 _ViewStart 执行此操作。您可以使用 PageData(如 stackoverflow.com/questions/4834045/… 所示)或在页面顶部声明它(包括在通常声明 ViewBag.Title 的位置)。
    • @user1477388 stackoverflow.com/questions/6578029/… 中显示的另一个替代方案。您可以通过ViewContext.ViewData["Theme"] 访问它
    • 我现在正在使用它,但它再次报错:@Code Layout = (@ViewContext.Controller.ViewBag.Theme) ? ViewBag.Theme : "~/Views/Shared/_Layout.vbhtml" 结束代码
    • 同上:编译错误说明:编译服务该请求所需的资源时出错。请查看以下特定错误详细信息并适当修改您的源代码。编译器错误消息:BC30201:预期表达式。源错误:第 3 行:第 4 行:第 5 行:布局 = (@ViewContext.Controller.ViewBag.Theme) ? @ViewContext.Controller.ViewBag.Theme : "~/Views/Shared/_Layout.vbhtml" 第 6 行:第 7 行:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多