Лучшие практики MVC, ascx и Javascript - как создать автономные элементы управления? NerdDinner делает это неправильно - PullRequest
3 голосов
/ 14 сентября 2010

Вопрос в том, как создать элементы управления / частичные представления / редактировать шаблоны (файлы ascx) в ASP.Net MVC2, чтобы они были «самодостаточными».Самодостаточный означает здесь, что, если некоторый код Javascript должен быть применен к элементу управления, это не включено в страницу (aspx), но в сам элемент управления.Конкретный пример: NerdDinner's DateTime.ascx.Файл содержит код JS, который делает текстовое поле хорошим средством выбора DateTime.

Мои проблемы: Содержащая страница содержит jQuery.js, timepicker.js, jQueryUI css и datepicker css.(В случае с NerdDinner это все на главной странице).Поэтому всякий раз, когда я хотел бы использовать необычный DateTimePicker для моих типов DateTime, содержащая страница должна знать об этих зависимостях и добавлять все файлы js и css.Я думаю, что мне здесь не хватает, это решение, которое заменяет ClientScript.RegisterClientScriptBlock.

Другая проблема с тем же примером NerdDinner: в DateTime.ascx написано $ ('# Dinner_EventDate'), которое зависит как оттип контейнера и на имя свойства.Это не общее решение для разделяемой DateTime EditorTemplate.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 28 марта 2013

Я не уверен, если это вопрос, специфичный для MVC. Если вы хотите действительно автономный элемент управления, посмотрите на серверные элементы управления (например, составной элемент управления или элемент управления сценария). Эти элементы управления не используют страницы ASCX и не зависят от веб-приложения. Таким образом, вы можете встраивать свои CSS-листы и JS-страницы в ресурс. Когда вы строите проект, он компилируется в одну DLL. Таким образом, вы можете создать свою собственную библиотеку элементов управления. Недостатком, однако, является то, что сделать эти элементы управления значительно сложнее. Если вам интересно, дайте мне знать и я опубликую пример. Взгляните сюда, например: http://msdn.microsoft.com/en-us/library/aa719734%28v=vs.71%29.aspx

Но, если вы действительно хотите использовать страницу ASCX для встраивания javascript и CSS, вы можете сделать это через менеджер сценариев (ну, по крайней мере, я сделал это с помощью Javascript, а не CSS). Пример:

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      dim myScript as new StringBuilder
      myScript.Append("function helloWorld(){" & vbcrlf)
      myScript.Append("alert('Hi')" & vbcrlf)
      myScript.Append("}" & vbcrlf)

      ScriptManager.RegisterStartupScript(Me.Page, Me.Page.GetType(),"MyScript",myScript.toString, false)
  End Sub

В этом примере создается простой текст функции javascript и регистрируется на странице. Нет, если у вас много javascript, это станет громоздким. Кроме того, я не уверен, что это будет работать с CSS. Дайте мне знать, если это поможет.

0 голосов
/ 15 сентября 2010

Вам необходимо сослаться на эти файлы со страницы. Если вы поступите иначе, то вы поймете, как эти элементы включены в html, и где ваш элемент управления включен в страницу.

Что мы делаем, мы объединяем все эти отдельные файлы js / css в один файл с некоторым дополнительным кодом (делается один раз). Таким образом, вы ссылаетесь только на один файл со своей главной страницы . Пока у вас нет ничего особо тяжелого, это очень разумно.

Для проблемы с идентификатором измените jquery на поиск по классу css .


оригинальный ответ: игнорируйте ниже, я думал, что это не было в отдельных файлах.

Переместите его в файл .js и перейдите от использования идентификатора к классу.

Если вы хотите сохранить его структурированным / код .js, который находится в файле, предназначенном только для кода этого элемента управления, вы можете сделать это и добавить дополнительный код, который объединяет все различные файлы .js на вашем сайте в один. JS файл. Это позволяет структурировать его по своему усмотрению, не получая лишних лишних запросов.

...