Лучший способ поделиться элементами управления ASP.NET .ascx между различными веб-приложениями? - PullRequest
14 голосов
/ 26 августа 2008

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

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

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


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

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

Спасибо!

Ответы [ 10 ]

15 голосов
/ 26 августа 2008

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

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

5 голосов
/ 26 августа 2008

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

2 голосов
/ 27 января 2010
2 голосов
/ 17 декабря 2008

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

1 голос
/ 26 августа 2008

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

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

Вот пример:

<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.

1 голос
/ 26 августа 2008

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

0 голосов
/ 05 февраля 2013

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

0 голосов
/ 03 сентября 2008

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

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

  1. Главные страницы (и, в свою очередь, дизайнеры и форматирование представления html) не работают с указанным файлом, поэтому вы теряете много функциональности. Шагом перед сборкой и большим количеством записей svn: ignore был мой взлом. Также было трудно заставить CruiseControl.NET заставить задачу перед сборкой выполнять в нужных папках.
  2. Общие страницы / элементы управления должны быть чрезвычайно осведомлены о том, к чему они обращаются и на что ссылаются, чтобы избежать внесения дополнительных зависимостей.
  3. Оба сайта заблокированы для развертывания.
  4. Теперь я должен помолиться, чтобы сопровождающий прочитал мой маленький маленький документ о беспорядке, который я совершил. Это так далеко от того, что я видел в проектах ASP.NET.

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

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

0 голосов
/ 26 августа 2008

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

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

0 голосов
/ 26 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...