3

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

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

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

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

还有其他想法吗?

4

4 回答 4

5

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

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

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>  

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

这将进入头部

于 2008-10-26T20:45:41.667 回答
5

博客中的解决方案:在 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>
 
于 2008-10-31T10:56:45.490 回答
3

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

在我的母版页中,我加载了我希望在所有内容页面中使用的标准脚本文件(jquery.js、global.js、jquery-plugins、.css 文件等)。然后,我在我的母版页中定义所需的任何事件(onLoad、onSave 等)。我创建的每个内容页面都有自己的 .js 文件与之关联,我在内容 .aspx 页面中加载该脚本文件。任何需要在内容页面之间以不同方式实现的 .js 事件都在单独的内容 .js 文件中处理。所以基本上我的母版页有一组 .js 函数,我的内容页脚本将实现这些函数。现在我只是将这些模板 .js 函数签名存储在一个文件中,然后将它们复制并粘贴到我需要创建的每个新 content.js 文件中。但是,我'

回顾一下:

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

ContentPage 加载:ContentPage.js

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

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

于 2008-10-16T03:58:58.577 回答
0

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

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

于 2008-10-16T02:01:24.210 回答