【发布时间】: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 没有被初始化。所以也许我需要在某个地方注册这个控件。我还查看了请求,并且此控件的视图状态未在请求中发送。