Установка атрибута OnLoad тела на главной странице Asp.net MVC

StackOverflow https://stackoverflow.com/questions/207150

Вопрос

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

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

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

Изменить. Я полагаю, что одна из идей заключалась бы в том, чтобы вместо этого использовать событие готовности документа jQuery...

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

Это было полезно?

Решение

Я использовал следующий шаблон в своем текущем проекте 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, плагины.js

Загрузка страницы контента:Контентпейдж.js

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

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

Другие советы

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

Я бы рекомендовал добавить версию JQuery Мустафы, в которую включены комментарии 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>  

Затем в вашем представлении вы можете выбрать, вставлять ли туда код или нет.

который будет входить в раздел заголовка

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

МастерПейдж.мастер

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

По умолчанию.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top