Установка атрибута тела OnLoad на главной странице MVC Asp.net - PullRequest
3 голосов
/ 16 октября 2008

У меня есть представление с использованием главной страницы, которая содержит некоторый JavaScript, который должен быть выполнен с использованием OnLoad тела. Каков наилучший способ установить OnLoad на моей MasterPage только для определенных представлений?

По идее я пытался передать имя функции javascript как ViewData. Но я действительно не хочу, чтобы мои контроллеры знали о javascript на странице. Мне действительно не нравится этот подход ...

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

Редактировать - я полагаю, одной идеей было бы использовать вместо этого событие готовности документа jQuery ...

Есть еще идеи?

Ответы [ 4 ]

5 голосов
/ 31 октября 2008

Решение из блога: Использование загрузки тела с ASP.net 2.0 MasterPages

<strong>MasterPage.master</strong>

<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();">

<strong>Default.aspx</strong>

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 
5 голосов
/ 26 октября 2008

Теперь, когда JQuery официально является частью ASP.NET MVC, я бы рекомендовал использовать его. Он небольшой и добавляет тонны ценности вашему приложению.

Я бы порекомендовал добавить версию JQuery от Mustafa с комментариями Intellisense:

JQuery-1.2.6-intellisense.js

Затем добавьте его в папку «Сценарии» (впервые в 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>  

Тогда в вашем View вы можете добавить код или нет.

, который попадет внутрь головной части

3 голосов
/ 16 октября 2008

Я использовал следующий шаблон с моим текущим проектом MVC, и он, кажется, пока работает довольно хорошо для моей работы .js ...

На моей главной странице я загружаю свои стандартные файлы сценариев, которые я хочу использовать на всех своих страницах контента (такие как jquery.js, global.js, jquery-плагины, файлы .css и т. Д.). Затем я определяю все события, которые необходимы на моей главной странице (onLoad, onSave и т. Д.). Каждая создаваемая мной страница содержимого будет иметь собственный файл .js, связанный с ним, и я загружаю этот файл сценария на страницу содержимого .aspx. Любые события .js, которые должны быть реализованы по-разному между страницами содержимого, обрабатываются в отдельном файле содержимого .js. Так что в основном моя мастер-страница имеет набор функций .js, которые будут реализованы скриптами моей страницы контента. Прямо сейчас я просто храню эти сигнатуры функций шаблона .js в файле, копирую и вставляю их в каждый новый файл content.js, который мне нужно создать. Тем не менее, я думаю о создании генератора кода или инструмента, который выкладывал бы эти сигнатуры для меня в любой новый файл .js, который мне нужно создать (если .js имеет некоторую форму интерфейса или возможности наследования, дайте мне знать).

Итак, резюмируем:

MasterPage.Master Нагрузки: jquery.js, global.js, plugins.js

ContentPage Loads: ContentPage.js

Global.js содержит функции, вызываемые главной страницей, которые не изменяются между страницами содержимого наряду с любыми другими глобальными рутинными функциями.

Каждый ContentPage.js реализует свои собственные функции для страницы содержимого вместе с теми функциями, которые вызывает главная страница, которые имеют различное поведение.

0 голосов
/ 16 октября 2008

В любом случае, вам определенно следует использовать jQuery или другой JavaScript-фреймворк.

Пусть ваши контроллеры передают какие-то индикаторы состояния вашим представлениям, но не вещи, связанные с представлениями, такие как имена функций JavaScript. От ваших взглядов зависит отображение индикаторов состояния на имена функций JavaScript.

...