Javascript 设置主体';Asp.net MVC母版页中的s OnLoad属性
我有一个使用母版页的视图,该母版页包含一些javascript,需要使用Body的OnLoad执行这些javascript。对于某些视图,在母版页上设置OnLoad的最佳方法是什么 我尝试的想法是将javascript函数的名称作为ViewData传递。但是我真的不想让我的控制器知道页面上的javascript。我真的不喜欢这种方法Javascript 设置主体';Asp.net MVC母版页中的s OnLoad属性,javascript,asp.net-mvc,master-pages,Javascript,Asp.net Mvc,Master Pages,我有一个使用母版页的视图,该母版页包含一些javascript,需要使用Body的OnLoad执行这些javascript。对于某些视图,在母版页上设置OnLoad的最佳方法是什么 我尝试的想法是将javascript函数的名称作为ViewData传递。但是我真的不想让我的控制器知道页面上的javascript。我真的不喜欢这种方法 <body onload="<%=ViewData["Body_OnLoad"]%>"> <asp:ContentPlaceHolde
<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
编辑-我想一个想法是使用jQuery的DocumentReady事件来代替
还有其他想法吗?无论如何,您肯定应该使用jQuery或其他JavaScript框架
让您的控制器向视图传递某种状态指示器,但不要传递特定于视图的内容,如JavaScript函数的名称。将状态指示器映射到JavaScript函数名取决于您的视图。我在当前的MVC项目中使用了以下模式,到目前为止,它似乎对我的.js工作非常有效 在母版页中,我加载了我希望在所有内容页中使用的标准脚本文件(如jquery.js、global.js、jquery插件、.css文件等)。然后,我定义母版页中需要的任何事件(onLoad、onSave等)。我创建的每个内容页面都有自己的.js文件与之关联,我将该脚本文件加载到content.aspx页面中。任何需要在内容页之间以不同方式实现的.js事件都在单个content.js文件中处理。因此,基本上我的母版页有一组.js函数,我的内容页脚本将实现这些函数。现在我只是将那些template.js函数签名存储在一个文件中,然后将它们复制并粘贴到我需要创建的每个新content.js文件中。然而,我正在考虑构建一个代码生成器或工具,在我需要创建的任何新的.js文件中为我提供这些模板签名(如果.js具有某种形式的接口功能或继承特性,请告诉我) 因此,总结一下: 主加载:jquery.js、global.js、plugins.js ContentPage加载:ContentPage.js Global.js包含母版页调用的函数,这些函数与任何其他全局例程函数在内容页之间不会更改
每个ContentPage.js都为内容页实现自己的函数,以及母版页调用的具有不同行为的函数。既然JQuery正式成为ASP.NET MVC的一部分,我建议使用它。它很小,为您的应用程序增加了很多价值 我建议添加Mustafa版本的JQuery,其中包含Intellisense注释: 然后将其添加到您的脚本文件夹(MVC Beta 1中新增),并按如下方式引用:
<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script>
$(document).ready(function() {
// do stuff when DOM is ready
});
<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>
因为您提到您只希望它发生在某些视图中,所以您可以在母版页中添加一个占位符,如下所示:
<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script>
$(document).ready(function() {
// do stuff when DOM is ready
});
<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>
然后在您看来,您可以选择将代码放在那里,也可以不放
这将进入博客的标题部分解决方案:
母版页。母版
函数mp_onload(){
if(window.body_onload!=null)
window.body_onload();
}
Default.aspx
函数体_onload()
{
//做点什么
}
谢谢你的建议。我可能会玩弄这个主意。如果您曾经创建过工具或生成器,请务必将其发布在此处!