ASP.NET MVC 3中带有Javascript操作的HTML助手
本文关键字:操作 Javascript HTML 助手 NET MVC ASP | 更新日期: 2023-09-27 18:23:52
Helpers.cshtml文件中有很多HTML助手,但有些助手(HTML)需要一些jquery操作,那么我如何在Helpers.cshhtml中调用jquery,这可能吗?
我知道我们可以将js文件保存在header或特定页面中,但我不想这样做,我只想在加载特定helper的页面上使用jquery或javascript。
有人知道吗?我的场景是,我有一个列表框控件,它从helper正确加载,但我需要将自定义主题应用到列表框。
Clarity 多一点
//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?
}
使用Web Forms,当页面上使用某些服务器控件时,框架可以自动包含Javascript(一次);ASP.Net MVC没有这样的功能。听起来这就是你所缺少的。
这样做的方法是在客户端上。查看RequireJShttp://requirejs.org/.这是一个用于管理Javascript依赖关系的客户端库。这做了Web窗体所做的,但更好,而且做得更多。您的主布局将有一个脚本标签,如下所示:
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
这可以是您在每个页面上包含的仅的脚本标记。其他所有内容只能根据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表单框架所做的要好得多,而且完全是客户端的,在我看来,这就是它的归属。
您可以在助手体中放置<script>
标记。
以部分视图为例:
@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>
}