У меня возникла проблема с настраиваемым элементом управления, отображающим его содержимое (дочерние элементы управления) вне тега, что приводит к ошибкам и проблемам времени выполнения. В попытке упростить все, что я могу, я создал элемент управления ниже, но у него такая же проблема. Я пробовал наследовать от Control, WebControl и CompositeControl, что приводит к той же проблеме. Угадай, что есть что-то очевидное, что я делаю неправильно ... Спасибо за любую помощь.asp.net пользовательский контроль рендеринга вне формы тег
using System;
using System.Web.UI.WebControls;
namespace MyControls
{
public class TestControl : CompositeControl
{
protected override void CreateChildControls()
{
Controls.Clear();
Controls.Add(new Button() { Text = "TestControl!" });
ClearChildViewState();
}
}
}
Добавление элемента управления программно приводит к разметке вне тега формы. Добавление контроля с помощью разметки работает правильно.
protected void Page_Load(object sender, EventArgs e)
{
Controls.Add(new TestControl());
}
...
<body>
<form name="PageForm" method="post" action="default.aspx" id="PageForm">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTE5MDEwMTE5MWRkg0FopdvLhTPGxHkGm1xCCOVQz6A=" />
</div>
<div>
</div>
</form>
</body>
</html>
<span><input type="submit" name="ctl04$ctl00" value="TestControl!" /></span>
Я согласен, что это сработает, но это не очень интуитивно, особенно если кто-то использует этот элемент управления и не знает лучше. Почему другие пользовательские элементы управления не поддерживают этот подход? Controls.Add (новая кнопка()); работает просто отлично. Мой контроль не делает. Что мне не хватает? – andleer
Чаще всего включать элементы управления с помощью декларативной разметки, а затем вручную добавлять элементы управления в ControlCollection. Вы можете связать пространство имен MyControls с префиксом тега, а затем использовать em как: в противном случае дать дополнительную информацию по вашей проблеме –
baretta