我在Helpers.cshtml文件中有很多HTML帮助器,但是一些帮助器(html)需要一些jquery动作,所以如何在helpers.cshtml中调用jquery,这可能吗?
我知道我们可以将js文件保存在标题或特定页面中,但我不想这样做,我只想在加载特定助手的页面上使用jquery或javascript。
有人对此有所了解吗? 我的方案是,我有列表框控件,从helper正确加载,但我需要将自定义主题应用于列表框。
稍微清晰
//in index.cshtml
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
//in Helpers.cshtml
@helper testListBox(string listName, string listData){
//...... HTML code .........
//Javascript here?
}
答案 0 :(得分:5)
使用Web窗体,当在页面上使用某些服务器控件时,框架可以自动包含Javascript(一次); ASP.Net MVC没有这样的设施。听起来这就是你所缺少的。
这样做的方法是在客户端上。在http://requirejs.org/查看RequireJS。这是一个用于管理Javascript依赖项的客户端库。这就是Web Forms所做的,但更好,而且做得更多。您的主布局将具有如下脚本标记:
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
这可以是您在每个页面上包含的 only 脚本标记。其他所有内容都可以根据RequireJS的需要动态加载。确实,你在每个页面加载它,但它比jQuery小,它赢得了它的位置,因为它为你做了很多。
使用您的示例,假设您有此标记:
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
它呈现HTML并需要jQuery脚本。你会渲染这个:
// HTML for list box here
<script type="text/javascript>
require(['jquery'], function($) {
// Do your jQuery coding here:
$("myList").doSomething().whatever();
});
</script>
require
函数将加载jQuery,除非它已经加载,然后执行你的代码。确实,每次使用HTML帮助程序时,您的jQuery代码段都会重复一次,但这并不是什么大问题。该代码应该简短。
RequireJS有效地管理依赖关系;您可以拥有模块A,模块B依赖于A,模块C依赖于B.当您的客户端代码请求模块C时,A和B将与C一起加载,并且顺序正确,并且只有一次每。此外,除了require.js的初始加载外,脚本是异步加载的,因此脚本加载不会延迟页面呈现。
当您需要在Web服务器上部署站点时,有一个工具可以检查Javascript文件之间的依赖关系,并将它们组合成一个或少量文件,然后将它们最小化。您的标记都不得改变。在开发过程中,您可以使用大量小型模块化Javascript文件以便于调试,在部署时,它们会被组合并最小化以提高效率。
这比Web表单框架做得好得多,而且完全是客户端,在我看来是它所属的。
答案 1 :(得分:0)
您可以在帮助程序正文中添加<script>
标记。
答案 2 :(得分:0)
对于局部视图的示例,这是怎么回事:
@model Member.CurrentMemberModel
@{
var title = "Test View";
}
<script type="text/javascript">
// Javascript goes in here, you can even add properties using "@" symbol
$(document).ready(function () {
//Do Jquery stuff here
});
</script>
@if (currentMember != null)
{
<div>Hello Member</div>
}
else
{
<div>You are not logged in</div>
}