Лучший способ обмена элементами ASP.NET.ascx в разных приложениях на веб-сайте?

Предположим, у вас есть 2 разных приложения ASP.NET в IIS. Кроме того, у вас есть элементы управления ASCX, которые вы хотите использовать в этих двух приложениях.

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

Элементы управления имеют ASCX с кодом HTML +.


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

Tundey, мы используем SVN здесь. У вас есть пример того, как реализовать свое предложение? Как SVN может совместно использовать элементы управления ASP.NET?

Спасибо!

Ответы

Ответ 1

Вам нужно будет создать составные элементы управления вместо элементов управления .ASCX, если вы захотите использовать их в отдельных проектах.

Ответ 2

Скотт Гатри дает отличный совет, как настроить проект библиотеки управления пользователями, а затем использовать события предварительной сборки для копирования пользовательских элементов управления в несколько проектов. Он работает очень хорошо.

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx

Ответ 3

В дополнение к тому, что сказал Тунди, расширение оболочки NTFS Link полезно, когда речь идет об обмене большим количеством контента (например: папка с .ascx/.aspx) между другими независимыми проектами. В случае кода я думаю, что создание другой рабочей копии из VCS является предпочтительным.

Ответ 5

Альтернативой является использование средства управления исходным кодом для "совместного использования" элементов управления ASCX между вашими веб-приложениями. Это позволит вам вносить изменения в элементы управления в любом приложении и контролировать источник, чтобы изменения отражались в наших веб-папках.

Ответ 6

Мне удалось это сделать, жертвуя некоторой легкостью создания элементов управления в первую очередь.

Вы можете создать проект библиотеки управления, который будет генерировать DLL библиотеки управления для вас. Недостатком является то, что вам нужно создать элементы управления только с кодом. В моем последнем проекте это было прекрасно. В более сложных элементах управления это может быть проблемой.

Вот пример:

<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _
Public Class BreadCrumb
    WebControl

    <Bindable(True)> _
    Property Text() As String
        '...'
    End Property

    Protected Overrides Sub RenderContents(output as HtmlTextWriter)
        output.write(Text)
    End Sub

    Private Sub Page_Load(...) Handles MyBase.Load
        ' Setup your breadcrumb and store the HTML output '
        ' in the Text property '
    End Sub
End Class

Все, что вы помещаете в это свойство Text, будет отображаться.

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

Ответ 7

Я использую StarTeam здесь, и он позволяет вам "разделить" объекты (файлы, запросы на изменение, требования и т.д.) в нескольких папках. Не уверен, имеет ли Subversion (SVN) эту функцию. Если это не так, вот еще один трюк, который вы можете использовать: создать соединение из основного расположения элементов управления в местоположение в других проектах. Соединение похоже на символическую ссылку Unix. Вы можете загрузить инструмент для создания соединений в Windows из здесь

Ответ 8

Самая большая проблема, которую я заметил с помощью элементов управления в ASP.Net, заключается в том, что вы не можете легко получить конструкторскую поддержку как для создания элемента управления, так и для использования элемента управления на сайте после его создания. Единственный способ, которым я смог это сделать, - создать элемент управления .ascx без кода (т.е. Весь код на стороне сервера находится в теге script в файле .ascx с сервером runat = "server" атрибут).

Но даже тогда вам все равно придется копировать файл .ascx, поэтому, если вам когда-либо понадобится внести изменения, это означает обновление файла в любом месте, где вы его использовали. Так что да, убедитесь, что это в контроле источника.

Ответ 9

Недавно я сделал веб-приложение, которое просто ссылалось на файлы (всего около 90) из одного веб-приложения (aspx, master и ascx) без большой проблемы. Тем не менее, я использовал сильно измененную версию шаблон MVP, множество интерфейсов и соглашений, чтобы снизить сложность, тот же средний уровень и один сайт был подмножеством другого.

Большие проблемы:

  • Мастер-страницы (и, в свою очередь, дизайнеры и форматирование в формате html) не работают с файлом, на который ссылаются, поэтому вы теряете много функциональности. Шаг предварительной сборки и множество записей svn: ignore были моим взломом. Также было больно получить CruiseControl.NET, чтобы выполнить задачу предварительной сборки в правильных папках.
  • Общие страницы/элементы управления должны быть предельно осведомлены о том, что они касаются и ссылаются, чтобы избежать дополнительных зависимостей.
  • Оба узла блокируются для развертывания.
  • Теперь я должен молиться, чтобы сопровождающий читал мой маленький pokey документ о беспорядке, который я сделал. Его так далеко за пределами того, что я видел в проектах ASP.NET.

Я был под сильным давлением времени, чтобы заставить его работать, и теперь оба приложения находятся в производстве. Я бы не рекомендовал его, но если вы заинтересованы в:

Добавьте существующий элемент, выберите некоторые файлы, нажмите кнопку "Добавить кнопки" и скажите "Добавить как ссылку".

Ответ 10

У меня есть предложение. Мы можем использовать пользовательский контроль в приложении с множественными значениями, создавая пользовательский контроль внутри проекта веб-сайта как обычно. Затем измените свойство веб-сайта. Используйте фиксированные имена и отдельные узлы. Затем мы можем использовать панель управления пользователя в нескольких приложениях.