2011-11-20 41 views
1

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

我试着在我的_Layout中写一个@function {},但是这个不能从我的Views中调用。

那么,如何写一个类,允许我做同样的事情到

@Something.registerscript("myscript.js") 

再布局页面

@Something.RenderScripts() 

我看到这里使用Singleton模式的实现上.. 。

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

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

+0

对于任何未来的读者,[检查我的回答类似的问题](http://stackoverflow.com/a/13765578/209259)。 –

回答

0

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

例如:

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

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

我不会提出这样一个答案,因为是你想要做的其实比这更多的(据我所知道的方法可行,这不与EditorTemplates等合作)。但是如果你想复杂的话,这很容易。

+0

好吧,这太sloppu我想尝试并尽可能减少标记:-) – Exitos

0

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

+0

为什么不使用viewbag?我只将数据从一个视图直到_layout然后渲染页面?另外,为什么你不提供样品而不是在我的解决方案中选择一个孔? – Exitos

+0

为什么不呢?因为我认为范围是错误的。例如,在RenderAction生成多个部分的情况下,我不确定ViewBag作用域。项目始终是可靠的1请求范围。你真的需要我提供“将此存储到字典中”,“从字典中取出”样本?我很惊讶,有人在这里反应(“不要在我的解决方案中挑出漏洞”) - 我试图帮助你的人 – rouen

+0

我真的不知道如何将项目传递给一个方法,这就是我正在努力的方法,我应该通过参考来传递它吗?对不起刚刚过了一天......,我看到你对范围的看法,这是方便的信息... – Exitos

0

Viewbag或它的相对viewdata我会说是最好的集合用于此,因为您的上下文似乎在视图内。你会在哪里注册脚本&你会在哪里渲染它?

您可以,我认为,编写帮助器扩展来包装注册表的事情的一面&。我相信辅助方法可以访问viewdata。您会从您使用的实际商店中获得抽象的额外奖励,因为您只能从这些帮助器方法中引用它。

相关问题