在Asp.net MVC母版页中设置Body的OnLoad属性

时间:2008-10-16 01:40:51

标签: javascript asp.net-mvc master-pages

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

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

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

编辑 - 我想一个想法就是使用jQuery的文档就绪事件......

还有其他想法吗?

4 个答案:

答案 0 :(得分:5)

现在JQuery正式成为ASP.NET MVC的一部分,我建议使用它。它很小,为您的应用程序增加了大量的价值。

我建议添加Mustafa版本的JQuery,其中包含Intellisense评论:

jquery-1.2.6-intellisense.js

然后将其添加到您的Scripts文件夹(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>  

然后在您的视图中,您可以选择将代码放在那里。

将进入头部

答案 1 :(得分:5)

来自博客的解决方案:Using body onload with ASP.net 2.0 MasterPages

MasterPage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

Default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

答案 2 :(得分:3)

我在目前的MVC项目中使用了以下模式,到目前为止我的.js工作似乎工作得很好......

在我的母版页中,我加载了我想要在所有内容页面中使用的标准脚本文件(例如jquery.js,global.js,jquery-plugins,.css文件等)。然后我定义我的母版页中需要的任何事件(onLoad,onSave等)。我创建的每个内容页面都有自己的.js文件,并在内容.aspx页面中加载该脚本文件。在内容页面之间需要以不同方式实现的任何.js事件都在单个内容.js文件中处理。所以基本上我的母版页有一组.js函数,我的内容页脚本将实现。现在我只是将这些模板.js函数签名存储在一个文件中,然后将它们复制并粘贴到我需要创建的每个新的content.js文件中。但是,我正在考虑构建一个代码生成器或工具,在我需要创建的任何新的.js文件中为我提供这些模板签名(如果.js具有某种形式的接口功能或继承功能让我知道)。 / p>

所以回顾一下:

MasterPage.Master加载:jquery.js,global.js,plugins.js

ContentPage加载:ContentPage.js

Global.js包含母版页调用的内容页面之间不会改变的函数以及任何其他全局例程函数。

每个ContentPage.js都实现了内容页面自己的功能,以及主页调用具有不同行为的那些功能。

答案 3 :(得分:0)

无论如何,你绝对应该使用jQuery或其他JavaScript框架。

让您的控制器将某种状态指示器传递给您的视图,而不是特定于视图的事物,例如JavaScript函数的名称。您可以将状态指示符映射到JavaScript函数名称。