Я пытаюсь создать настраиваемый компонент. Компонент должен динамически инициализироваться в коде. Компонент представляет собственное окно, содержащее другие компоненты, такие как поля даты, поля раскрывающегося списка и т. Д. Я получил свой класс из Ext.Net.Window и добавил простой DateField. Дату следует использовать при нажатии кнопки на сервере (дата не должна передаваться через параметр DirectMethod). Когда я добавляю этот компонент для разметки, он отлично работает. Но когда я добавляю окно в код позади, значение поля даты не устанавливается после вызова сервера. Я создаю окно в жизненном цикле в событии OnInit с помощью «Controls.Add (mywindow)». Было бы здорово, если бы кто-нибудь мог дать мне подсказку. Вот мой код окна (onExecuteButtonClick просто вызывает метод прямого и скрывает окно):Динамическая инициализация компонента Ext.Net
public sealed class WindowFilterComponent:Window
{
private const string Script = "MyProject.JavaScript.src.WindowFilterComponent.js";
public override string InstanceOf
{
get
{
return "MyProject.Filter.WindowFilterComponent";
}
}
public override string XType
{
get
{
return "windowfiltercomponent";
}
}
private Button _btnExecute;
private Button _btnCancel;
private DateField _dateField;
protected override void OnInit(EventArgs e)
{
AutoHeight = true;
_btnExecute = new Button("Execute Export");
_btnExecute.Listeners.Click.Handler = string.Format("#{{{0}}}.onExecuteButtonClick()", ID);
_btnCancel = new Button("Cancel");
_btnCancel.Listeners.Click.Handler = string.Format("#{{{0}}}.onCancelButtonClick()", ID);
Buttons.Add(_btnExecute);
Buttons.Add(_btnCancel);
_dateField = new DateField();
Items.Add(_dateField);
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (ExtNet.IsAjaxRequest || Page.IsCallback) return;
ResourceManager.GetInstance().AddDirectMethodControl(this);
}
[DirectMethod(ShowMask = true)]
public void ExecuteClick()
{
var date = _dateField.SelectedValue;
}
}
Теперь Useage на моей странице в случае OnInit:
protected override void OnInit(EventArgs e)
{
var myWindow = new WindowFilterComponent()
{
Hidden = false,
Width = 500
};
myWindow.ID = myWindow.ID + "MyComponent";
Controls.Add(myWindow);
base.OnInit(e);
}
Если вам нужен код, пожалуйста, дайте мне знать :) – xandi1987
может показать ваш класс, который получил окно – sakir
Я добавил класс на вопрос – xandi1987