【问题标题】:Custom Ext.Net component dynamically initialization自定义 Ext.Net 组件动态初始化
【发布时间】:2014-09-29 20:24:53
【问题描述】:

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

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

【问题讨论】:

  • 如果您需要一些代码,请告诉我:)
  • 你能显示你的类是哪个派生窗口
  • 我已将课程添加到问题中
  • 请同时演示如何在后面的代码中添加控件。
  • 当然。一开始我又改了帖子。我猜,我将此控件添加到生命周期的后期。但是在 OnPreInit 事件中,Controls 没有被初始化。所以也许我需要在某个地方注册这个控件。我还查看了请求,并且此控件的视图状态未在请求中发送。

标签: c# asp.net ext.net


【解决方案1】:

我认为窗口是在窗体之外呈现的。

请更换

Controls.Add(myWindow);

Form.Controls.Add(myWindow);

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

【讨论】:

  • 非常感谢 :) 我很高兴地说...问题已解决 :)
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
相关资源
最近更新 更多