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

Vyr*_*tek 3 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" />
Run Code Online (Sandbox Code Playgroud)

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

还有其他想法吗?

Dav*_*d P 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> 
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您现在可以添加如下函数:

$(document).ready(function() {
   // do stuff when DOM is ready
});
Run Code Online (Sandbox Code Playgroud)

既然你提到你只想在某些视图中发生它,你可以在你的母版页中添加一个占位符,如下所示:

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  
Run Code Online (Sandbox Code Playgroud)

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

哪个会进入头部


Rob*_*vić 5

来自Blog的解决方案:在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>
 
Run Code Online (Sandbox Code Playgroud)