При добавлении самодельного элемента управления в WebForms на форму программно, теряется та часть, которая написана в XAML разметке, как быть?
Подскажите, пожалуйста, если можете.
Для Web Forms делаю пользовательские элементы управления, разметку делаю в XAML файле, код в C#.
Потом кидаю этот элемент на форму - все поля, которые были заданы при оформлении пользовательского элемента управления в XAMLе - все появляются на моей форме, короче, всё работает.
Если я пытаюсь добавить этот элемент управления через код (C#), типа
{ ... форма.Controls.Add(new мойЭлементУправления()); ...}
то эти все поля пропадают (они становятся не инициализированными).
А так нет:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl myControl = new WebUserControl();
}
}
1)Это не XAML, а ASPX - иначе вы разрабатываете для WPF и вопрос задали не по тем тегам.
2)WebForms - отмирающая хрень, и если вы планируете зарабатывать на жизнь веб-разработкой под ASP.NET - изучайте MVC.
3)Ваш код в описанном виде вполне нормален, но у WebForms есть фича, с которой сейчас мало кто связываться хочет, а именно - жизненный цикл страницы. Внимание загадка - на каком этапе жизненного цикла вы вкрячили этот контрол? Есть вероятность что вы его вкрячили на этапе, когда страница считает что все Контролы уже полностью инициализированы и их осталось только отрисовать.
4) Ну и без кода вашего контрола что-либо судить тоже трудно.
Контрол простой, любой, допустим текстовое поле и кнопка.
Код WebControl мойКонтрол=new WebControl () вставляю в
protected void Page_Load(object sender, EventArgs e).
Да, не так выразился, понял, что XAML - это WPF; но что XAML, что XML, что все ASPX - все на один лад, поэтому думал одно, а спросил другое.
Пытался перейти на MVC, но никак не осилю, никак не пойму принципиальные моменты, которые заставляют перейти от WebForms (да, много там умных вещей, но для меня они пока непонятны). Не только отличаи от WebForms, но и вообще зачем Microsoft взяла этот подход к разработке (для меня, из-за того, что я его не понимаю, пока только один ответ: Microsoft просто развивает то, что популярно у других, MVC).
Сергей Горбулев: По факту MVC имеет более короткий жизненный цикл запроса( ну нет там 20 событий, каждое из которых имеет свое назначение и свои ограничения) - одна точка для обработки запроса и одна точка для отрисовки разметки.Остальное уже нырки вглубь каждой конкретной области ответственности.
Касательно ваших уточнений. www.cyberforum.ru/asp-net/thread502681.html Вот вам ссылочка по вашей проблеме и внутри есть дополнительные ссылки на похожие вопросы. Если вкратце - попробовать перенести добавление контрола в Init из Load.
Дмитрий Ковальский, попробовал, но чего-то не пошло. Но нашёл там другой ответ, всё заработало (спасибо всё-равно, раньше ковырялся, но не мог найти), может кому будет интересно: