Улучшающий элементы Javascript в ASP.NET главные страницы


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

В принципе, у меня есть javascript (созданный третьей стороной), который делает некоторые вещи whizzbang для элементов страницы, чтобы они выглядели красиво. Код отлично работает на отдельных страницах (т. е. без мастера), однако, когда я пытаюсь применить эффекты к странице содержимого в Мастере, он не работает.

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

Ссылка На Сценарий Главной Страницы

<script src="scripts.js" language="javascript" type="text/javascript" />

Одна Страница

<script>
    MakePretty("elementID");
</script>
Как вы можете видеть, мне нужна ссылка на каждой странице (следовательно, она находится в Мастере), но фактические элементы, которые я хочу "сделать", изменятся в зависимости от содержания.

Страницы Контента

Теперь, из-за того, что страница содержимого не имеет элемента <head>, я мы использовали следующий код, чтобы добавить его в элемент master pages <head>:

HtmlGenericControl ctl = new HtmlGenericControl("script");
ctl.Attributes.Add("language", "javascript");
ctl.InnerHtml = @"MakePretty(""elementID"")";
Master.Page.Header.Controls.Add(ctl);

Теперь этоне работает . Однако, если я заменю что-то простое, как alert("HI!"), все работает нормально. Поэтому код добавляется нормально, он просто не всегда выполняется в зависимости от того, что он делает..

Теперь, немного покопавшись, я узнал, что событие Load страницы содержимого возникает перед главными страницами, что может иметь эффект, однако, я думал, что javascript на странице был загружен/запущен сразу?

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

Как я могу заставить страницы содержимого вызывать код javascript, на который ссылается Главная страница?

Спасибо за любую/всю помощь по этому вопросу, ребята, вы действительно поможете мне с этой рабочей проблемой.

Примечания:

  • RegisterStartupScript и тому подобное, похоже, не работает. на любом уровне..
  • идентификаторы элементов управления устанавливаются нормально, даже в среде MasterPage, и отрисовываются должным образом.

Извинения, если что-то из этого неясно, я очень устал, поэтому, если нужно, пожалуйста, прокомментируйте, если требуется повторное слово/уточнение.

5 3

5 ответов:

Поместите заполнитель ContentPlaceHolder в головной раздел главной страницы, затем добавьте элемент управления asp: Content на странице содержимого, ссылающийся на заполнитель, и поместите сценарий в этот элемент управления. Вы можете настроить его для каждой страницы таким образом.

Кроме того, ссылка по идентификатору может не работать, поскольку при использовании главных страниц идентификаторы элементов управления на странице автоматически создаются на основе структуры контейнера. Поэтому вместо" elementID", как ожидалось, он может выводить "ctl00_MainContentPlaceHolder_elementid" просмотр исходного кода или использование firebug для проверки элементов формы, чтобы увидеть, какие идентификаторы выводятся.

Разве нельзя обойтись чистым javascript ?- )

-- просто добавьте что-то похожее на это внутри тега body:

<script type="text/javascript">
  window.onload = function(){
    MakePretty("elementID");
  }
</script>

Кстати, скрипт-тег должен иметь конечный тег:

<script type="text/javascript" src="myScript.js"></script>

Почему бы не использовать jQuery для поиска всех элементов управления? Что-то вроде этого:

$(document).ready(function(){
  $("input[type='text'], input[type='radio'], input[type='checkbox'], select, textarea").each(function(){
    MakePretty(this);
  });
});

Таким образом, вы получите все элементы на странице, вы можете подождать, пока страница будет готова (так что вы не измените DOM нелигально). Селектор jQuery может получить элементы в немного более определенном формате, если вам это нужно (например, добавить корневой элемент, например идентификатор тела div).

Также было бы лучше изменить метод MakePretty, чтобы он принимал элемент, а не идентификатор в качестве параметра для уменьшения обработки. накладные расходы.

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

При использовании главных страниц необходимо быть осторожным с идентификатором атрибута html, так как .NET изменит это значение, поскольку ему нужно сохранить уникальный идентификатор.

Я бы предположил, что ваш javascript применяет стили css через ID, и когда вы используете мастер-страницы, ID отличается от того, что есть в вашем aspx. Если вы убедитесь, что ваш javascript всегда добавляется, ваш ответ должен учитывать следующее:

  • Всегда устанавливайте идентификатор главной страницы в разделе загрузка страницы (this.ID = "префикс";)
  • любой HTML-элемент на главной странице будет иметь префикс ID главной страницы (то есть: на отрисованной странице будет "myPrefix_myDiv")
  • любой HTML-элемент в вашем идентификаторе держателя содержимого будет иметь префикс с дополнительным префиксом (например, myPrefix_ContentPlaceHolderId1_mydiv)
Пожалуйста, дайте мне знать, если я смогу что-нибудь прояснить. Надеюсь, это поможет!