Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置主体';Asp.net MVC母版页中的s OnLoad属性_Javascript_Asp.net Mvc_Master Pages - Fatal编程技术网

Javascript 设置主体';Asp.net MVC母版页中的s OnLoad属性

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

我有一个使用母版页的视图,该母版页包含一些javascript,需要使用Body的OnLoad执行这些javascript。对于某些视图,在母版页上设置OnLoad的最佳方法是什么

我尝试的想法是将javascript函数的名称作为ViewData传递。但是我真的不想让我的控制器知道页面上的javascript。我真的不喜欢这种方法

<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() { //做点什么 }
谢谢你的建议。我可能会玩弄这个主意。如果您曾经创建过工具或生成器,请务必将其发布在此处!