微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – MVC在布局代码之前执行视图代码并破坏我的脚本顺序

我正在尝试将我的所有 javascript包含移到页面底部.我正在使用带Razor的MVC.我写了一个帮助方法注册脚本.它使脚本按照它们注册的顺序保留,并且不包括欺骗.
@{ Html.RegisterScript("/scripts/someFile.js"); }

然后就在关闭身体标签之前,我做了类似这样的事情:

@Html.RenderScripts()
</body>

如果脚本在一个页面上全部注册,则一切正常.如果我在我的布局中注册了一些脚本,并在内部视图中注册了一些脚本,那么事情就会出错.基本上,内部视图在布局之前执行.因此,尽管内部视图中的脚本依赖于外部视图中的脚本,但它们之前已经过注册.

所以,如果我有_Master.cshstml,它有

@{
   Html.RegisterScript("script1.js");
   Html.RegisterScript("script2.js");
}

然后我将InnerView.cshtml与_Master.cshtml作为其布局并在我拥有的视图中

@{
   Html.RegisterScript("script3.js");
}

脚本按以下顺序呈现:script3,script1,脚本2.

有什么办法可以强制布局在内部视图之前执行吗?我已经尝试过各种各样的东西,内部视图似乎总是先执行.也许这是预期的?如果是这样,那么我完成我想要做的最好的方法是什么?

解决方法

不,这是他们执行的顺序,从最内层到最外层.我建议使用某种LIFO(后进先出)集合,如 Stack<T>来保存脚本,然后将它们从堆栈中弹出以将它们渲染出去;这样,最后添加的脚本,即布局中的脚本,将是首先渲染的脚本.

编辑

我写了a nuget package that handles rendering scripts from Partial views and Templates解决了这个问题.

原文地址:https://www.jb51.cc/csharp/100351.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐