【发布时间】:2011-07-23 02:55:21
【问题描述】:
我想知道我是否从正确的角度接近这个。
我正在构建一个 asp.net 应用程序。我正在使用 Masterpage 来查看应用程序的整体外观(您可以在下面看到代码)。
我想让菜单系统使用像 jQuery 的 .load() 函数这样的动态加载来加载内容。那很好,我把它记下来了。 .load() 函数使用innerHTML 将该内容泵入页面。如果您想在该页面上加载特定于模块的脚本和样式,这是一个问题。
我的问题是,在这样的环境中,你们如何为这些模块加载脚本?我应该在应用程序的初始加载时加载每个脚本吗?这个应用程序永远不会“那么大”,但我想确保我做对了以防万一。
MasterSheet
<div id="primaryNavigation">
<ul>
<li class="current"><a href="../Default.aspx">Main</a></li>
<li><a href="../Modules/Page1.aspx">Some Overview</a></li>
<li><a href="../Modules/Page2.aspx">Reporting</a></li>
<li><a href="../Modules/Page3.aspx">More Reporting</a></li>
<li><a href="../Modules/Page4.aspx">About</a></li>
</ul>
</div>
<div id="mainContentContainer">
<asp:ContentPlaceHolder ID="cphBody" runat="server" />
</div>
内容标签内的示例模块
<div id="container">
Inside a page
<script id="scriptToLoad" type="text/javascript">
alert('Something');
head.ready(function () { console.log('please print'); });
</script>
</div>
<div id="includeScripts">
../Files/Javascript/SomeModuleSpecificJs.js
../Files/Javascript/SomeModuleSpecificJs1.js
</div>
我的想法是在每个模块中设置一个div,它的 id 为“includeScripts”,并从这样的母版表中的方法加载它们。这种方法有效(显然需要一些调整)但是如果用户继续点击模块,最终每个文件都会被加载。如果是这样,我不妨将它们全部加载到母版表上。
加载 MasterPage 时运行的 JS
$navigation = $("#primaryNavigation").delegate('ul li a', 'click', function () {
$('#primaryNavigation').find('li').removeClass('current');
$(this).parent().addClass('current');
$('#mainContentContainer').load($(this).attr('href') + ' #container');
// Obviously this would overwrite the content from the container, this is merely proof of concept
$('#mainContentContainer').load($(this).attr('href') + ' #includeScripts');
var jsArray = $('#includeScripts').text().trim().split("\n");
$.each(jsArray, function (index, value) {
$.getScript(value);
});
return false;
});
【问题讨论】:
-
哇,还是只有一个答案。也许尝试提出另一个更通用的问题(“我如何...”)并分析任何提供的代码 sn-ps。
-
您的意思是母版页吗?我不知道母版表是什么...
-
@phillip 是的,母版页......对不起
标签: asp.net master-pages stateless