自定义Ext.Net组件动态初始化

本文关键字:动态 初始化 组件 Net Ext 自定义 | 更新日期: 2023-09-27 18:24:55

我正在尝试创建一个自定义组件。组件应该在代码隐藏中动态初始化。该组件提供了一个包含其他组件的自定义窗口,如日期字段、下拉字段等。我从Ext.Net.Window派生了我的类,并添加了简单的DateField。该日期应该由服务器上的按钮单击使用(日期不应该通过DirectMethod参数)。当我添加这个组件来标记时,它可以完美地工作。但是,当我在代码后面添加窗口时,日期字段的值不会在服务器调用之后设置。我正在通过"Controls.Add(mywindow)"在OnInit事件的生命周期中创建窗口。如果有人能给我一个提示,那就太好了。这里是我的窗口代码(onExecuteButtonClick只调用direct方法并隐藏窗口):

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;            
    }
}

现在我的页面在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);
}

自定义Ext.Net组件动态初始化

我认为Window是在Form之外呈现的。

请更换

Controls.Add(myWindow);

带有

Form.Controls.Add(myWindow);

此外,我建议为可提交字段(在您的情况下为DateField)设置显式id,以确保POST数据中的id密钥与服务器上的控件id匹配。