设置主体'的OnLoad属性

Setting the Body's OnLoad attribute in an Asp.net MVC Master Page

本文关键字:OnLoad 属性 主体 设置      更新时间:2023-09-26

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

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

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

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

还有其他想法吗?

既然JQuery正式成为ASP.NET MVC的一部分,我建议您使用它。它很小,可以为您的应用程序增加很多价值。

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

jquery-1.2.6-intellise.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>  

然后在您的视图中,您可以选择是否将代码放入其中。

它将进入头部的内部

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

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>
 

我在当前的MVC项目中使用了以下模式,到目前为止,它似乎对我的.js工作非常有效。。。

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

综上所述:

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

ContentPage加载:ContentPage.js

Global.js包含母版页调用的函数,这些函数与任何其他全局例程函数一起在内容页之间不发生变化。

每个ContentPage.js都为内容页实现自己的函数,以及母版页调用的具有不同行为的函数。

您肯定应该使用jQuery或其他JavaScript框架。

让控制器将某种状态指示器传递给视图,但不传递视图特定的东西,如JavaScript函数的名称。将状态指示器映射到JavaScript函数名取决于您的视图。