В Web.config это возможный зарегистрировать все пользовательские элементы управления в указанном каталоге

блок дисплея и ни один при нажатии кнопки

5
задан Jonathan Parker 25 March 2009 в 07:19
поделиться

4 ответа

Да и нет.

По сути, вы можете зарегистрировать все свои пользовательские элементы управления в web.config. НО вы столкнетесь с проблемами, если захотите использовать какой-либо из ваших пользовательских элементов управления в других пользовательских элементах управления.

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

  1. Зарегистрируйте их все в web.config, а затем, в случае вложения, зарегистрируйте элемент управления, который вы вкладываете непосредственно в родительский пользовательский элемент управления.
  2. Как упомянул Брайан выше, скомпилируйте ваши пользовательские элементы управления в сборку и сослайтесь на них в web.config.
  3. Это худший вариант, но в основном вы можете обойти проблему вложенности при регистрации всех ваших пользовательских элементов управления в web.config, разместив элементы управления в подпапках ... не очень хороший вариант.
  4. Другой вариант - строго набирать ваши usercontrols, возможно, создавая базовые классы для ваших usercontrols.

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

Здесь есть дополнительная информация здесь и здесь. Прочитайте комментарии по этому вопросу.

8
ответ дан 13 December 2019 в 22:16
поделиться

Это не возможно в web.config, насколько я знаю. Существует пара обходных решений... можно было бы быть помещен Ваши средства управления в отдельном проекте и скомпилировал бы их в единственный блок, на который ссылаются в web.config.

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

1
ответ дан 13 December 2019 в 22:16
поделиться

«Шаблон MVC в целом» - не нужно, но полезно. ASP.NET - тоже не обязательно.

.NET 3.5 - да. Это будет ваш рабочий инструмент, вы должны освоить его.

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

Также вы не избежите знания HTML / CSS, возможно JavaScript.

Просто не пугайтесь. Делайте это по одному шагу за раз, и вы получите это. Просто не читай слишком много. Практикуйте это.

Множество очень полезных учебников можно найти здесь: ASP.NET MVC Tutorials

Также читайте блоги от ASP.NET MVC «родителей»:

http://haacked.com

http://weblogs.asp.net/scottgu/default.aspx [тысяча двести двадцать семь] http://www.hanselman.com/ [+1228] http://stephenwalther.com/blog/Default.

1
ответ дан 13 December 2019 в 22:16
поделиться

Вот адаптация решения @Jeff Fritz для VB.NET. Он делает то же самое, но включает все элементы управления, расположенные в любом месте решения. (В нашей архитектуре используются модули, которые могут быть включены как внешние компоненты SVN, поэтому это дает очень хороший способ убедиться, что хост-приложение знает обо всех элементах управления модуля.)

    Sub RegisterUserControls()
        Dim Config As Configuration = WebConfigurationManager.OpenWebConfiguration("~/")
        Dim WebSection As PagesSection = TryCast(Config.GetSection("system.web/pages"), PagesSection)
        Dim ToRemove As List(Of TagPrefixInfo) = ( _
                From t As TagPrefixInfo In WebSection.Controls _
                Select t Where t.Source IsNot Nothing AndAlso t.Source.EndsWith(".ascx") _
            ).ToList
        For Each t As TagPrefixInfo In ToRemove
            WebSection.Controls.Remove(t)
        Next
        Dim SiteRoot As New DirectoryInfo(Server.MapPath("~"))
        For Each f As FileInfo In SiteRoot.GetFiles("*.ascx", SearchOption.AllDirectories)
            Dim Source As String = Path.Combine("~/", f.FullName.Replace(SiteRoot.FullName, "")).Replace("\", "/")
            Dim TagName As String = Path.GetFileNameWithoutExtension(f.Name)
            Dim NewTag As New TagPrefixInfo( _
                tagPrefix:="YOURPREFIX", _
                nameSpace:=Nothing, _
                assembly:=Nothing, _
                TagName:=TagName, _
                Source:=Source)
            WebSection.Controls.Add(NewTag)
        Next
        Config.Save(ConfigurationSaveMode.Modified)
        ConfigurationManager.RefreshSection("system.web/pages")
    End Sub

(Конечно, вы могли бы сослаться на это в Application_Start, как Джефф сделал.)

0
ответ дан 13 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: