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

发布于 2024-07-06 14:09:28 字数 410 浏览 5 评论 0原文

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

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

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

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

还有其他想法吗?

I have a view using a master page that contains some javascript that needs to be executed using the OnLoad of the Body. What is the best way to set the OnLoad on my MasterPage only for certain views?

On idea I tried was to pass the name of the javascript function as ViewData. But I dont really want my Controllers to have to know about the javascript on the page. I really don't like this approach...

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

Edit - I suppose one idea would be to use jQuery's document ready event instead...

Any other ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浅笑依然 2024-07-13 14:09:28

博客中的解决方案: 在 ASP 中使用 body onload .net 2.0 母版页

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>
 

Solution from Blog: 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>
 
若相惜即相离 2024-07-13 14:09:28

现在 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>  

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

它将进入头部内部

Now that JQuery is officially part of ASP.NET MVC, I would recommend using it. It's small, and adds tons of value to your application.

I would recommend adding Mustafa's version of JQuery that has the Intellisense comments included:

jquery-1.2.6-intellisense.js

Then add it to your Scripts folder (new in MVC Beta 1), and reference it like this:

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

In your code you can now add a function like this:

$(document).ready(function() {
   // do stuff when DOM is ready
});

Since you mentioned that you only want it to happen in certain views, you could add a placeholder in your Master Page like this:

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

Then in your View, you could choose to put code in there, or not.

which would go inside of the head section

染火枫林 2024-07-13 14:09:28

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

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

回顾一下:

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

ContentPage 加载:ContentPage.js

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

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

I have been using the following pattern with my current MVC project and it seems to be working pretty good for my .js work thus far...

Within my Master Page I load up my standard script files that I want to be used in all of my content pages (things like jquery.js, global.js, jquery-plugins, .css files, etc.). I then define whatever events that are needed in my master page (onLoad, onSave, etc.). Each content page that I create will have it's own .js file associated with it and I load that script file within the content .aspx page. Any .js events that need to be implemented differently between content pages are handled within the individual content .js file. So basically my Master Page has a set of .js functions that my content page scripts will implement. Right now I just store those template .js function signatures in a file and copy and paste them into every new content.js file that I need to create. However, I'm thinking about building a code generator or tool that would spit these template signatures out for me in any new .js file I need created (if .js has some form of interface capability or inheritance features let me know).

So to recap:

MasterPage.Master Loads: jquery.js, global.js, plugins.js

ContentPage Loads: ContentPage.js

Global.js contains functions that the master page invokes that do not change between content pages along with any other global routine functions.

Each ContentPage.js implements it's own functions for the content page along with those functions the master page invokes that have different behavior.

朮生 2024-07-13 14:09:28

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

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

You should definitely be using jQuery or another JavaScript framework anyway.

Have your controllers pass some kind of status indicator to your views, but not views-specific things like the names of JavaScript functions. It is up to your views to map status indicators to JavaScript function names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文