【问题标题】:How should I provide seperate layouts to different user types in NVelocity templates?我应该如何为 Velocity 模板中的不同用户类型提供单独的布局?
【发布时间】:2011-11-28 10:46:26
【问题描述】:

我正在为我们的在线商店重新设计模板(使用带有 NVelocity 视图引擎的 Castle Monorail),但想为某些用户提供旧布局。

我已经开始向 PropertyBag 添加一个变量来确定用户应该获得的版本并将布局设置为“BaseLayout.vm”,如下所示:

#if($StoreVersion == 2)
    #parse("VersionTwo/DefaultLayout.vm")
#else
    #parse('VersionOne/DefaultLayout.vm')
#end

这适用于布局,从技术上讲,我可以在每个模板文件中使用这种方法,但这似乎有点啰嗦。有没有更好的方法可以将其机械化?

【问题讨论】:

  • 是BaseLayout.vm的全部内容还是其中的一部分?
  • 这就是整个文件。这个想法是让代表动作的文件重定向到特定于版本的模板。我只是好奇是否有更好的方法来重定向到特定于版本的模板。
  • 为什么不在控制器中设置LayoutName属性?
  • 我以为我以前找过它,但我一定错过了。我可以使用它并在抽象控制器中覆盖 PreSendView,这样就可以完成这项工作。谢谢。

标签: asp.net castle-monorail nvelocity


【解决方案1】:

您可以将条件放入代码中并在控制器中设置 LayoutName 属性,而不是让布局有条件地“转发”到其他布局。

【讨论】:

  • 对于其他感兴趣的人,我对布局进行了上述操作,并覆盖了控制器上的 Process 方法以更改操作的 SelectedViewName。
【解决方案2】:

我会创建一个控制器过滤器并根据您的逻辑覆盖要呈现的布局名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2012-08-12
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多