如何封装对ViewBag或ViewData的调用?

时间:2011-11-20 16:17:08

标签: asp.net-mvc

我希望能够在ViewData或ViewBag中注册脚本块,然后在我的布局页面上将它们卸载到正确的位置。

我尝试在@function {}中写一个_Layout,但这不能从我的观点中调用。

那么如何编写一个允许我做类似于

的类
@Something.registerscript("myscript.js")

然后在布局页面

@Something.RenderScripts()

我在这里看到了使用单例模式的实现......

Add CSS or JavaScript files to layout head from views or partial views

但我担心这会导致问题,因为这应该是动态的而不是静态的!

3 个答案:

答案 0 :(得分:0)

这是一个通用的解决方案,还是只想在视图中包含脚本文件?对于后者,您始终可以创建一个名为“Head”的部分或在<head> - 元素中创建的任何部分。

例如:

_layout.cshtml
<html>
     <head>
          @RenderSection("Head", false)
     </head>
     ...
</html>

View.cshtml
@section Head
{
    <script type="text/javascript">...</script>
}

我不建议将此作为答案,因为您可能希望实际做更多的事情(据我所知,这不适用于EditorTemplates等)。但是如果你想要复杂,这很容易。

答案 1 :(得分:0)

为什么要使用ViewBag呢?如果要创建具有请求范围范围的内容,请使用HttpContext.Current.Items - 在您的情况下实现一个存储辅助方法,以及一个“渲染所有存储”方法。

答案 2 :(得分:0)

Viewbag或它的近亲视图数据我认为这是最好的集合,因为你的上下文似乎在视图中。你在哪里注册脚本&amp;你会在哪里呈现它?

我认为,您可以编写辅助扩展来包含寄存器和放大器。渲染事物的一面。我相信辅助方法可以访问viewdata。您将从您使用的实际商店中获得额外的抽象奖励,因为您只能从这些帮助方法中引用它。