2014-09-28 66 views
1

我想創建一個自定義組件。組件應該在代碼後面動態初始化。該組件提供了一個包含其他組件的自定義窗口,如datefields,下拉字段等。我從Ext.Net.Window派生出我的類並添加了簡單的DateField。日期應該由服務器上的按鈕單擊使用(日期不應該通過DirectMethod參數傳遞)。當我添加這個組件來標記它完美的作品。但是當我在後面的代碼中添加窗口時,datefield的值在服務器調用後未設置。 我正在通過「Controls.Add(mywindow)」在OnInit事件的生命週期中創建窗口。如果有人能給我一個提示,那將是很棒的。在這裏我的窗口代碼(onExecuteButtonClick只是調用直接法和隱藏窗口):自定義Ext.Net組件動態初始化

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

如果您需要一些代碼,請讓我知道:) – xandi1987 2014-09-28 13:35:03

+0

可以顯示您的班級派生窗口 – sakir 2014-09-28 13:36:17

+0

我已經將班級添加到問題 – xandi1987 2014-09-29 05:09:49

回答

1

我想窗口是外部呈現:在OnInit事件在我的頁面中的使用率

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

現在表格。

請更換

Controls.Add(myWindow); 

Form.Controls.Add(myWindow); 

此外,我會建議設立的submittable字段(的DateField你的情況)明確標識,以確保從POST數據的ID密鑰將匹配服務器上的控件的ID。

+0

非常感謝你:)我很高興地說...解決問題的方法:) – xandi1987 2014-10-01 12:26:23