2011-02-10 117 views
1

我使用的是Ext.Net,我遇到了問題。Ext.Net按鈕事件沒有觸發

我正在創建動態按鈕。這是工作,但如果我點擊,按鈕事件不工作:(

我該如何解決

我的代碼:?

foreach (var events in eventsInformation) 
{ 
    Ext.Net.Button btn = new Ext.Net.Button(); 
    btn.ID = events.EvtId.ToString(); 
    btn.Text = events.EvtName; 
    btn.Click += new EventHandler(Tickets_click); 
    ViewPort1.Controls.Add(btn); 
} 

回答

0

使用Ext.net DirectMethod代替ASP.NET回發事件處理程序。

<ext:Button ID="Button1" runat="server" Text="Click Me" Icon="Lightning"> 
    <Listeners> 
     <Click Handler="Ext.net.DirectMethods.SetTimeStamp();" /> 
    </Listeners> 
</ext:Button>    


<script runat="server"> 
[DirectMethod] 
public void SetTimeStamp() 
{ 
    this.Label1.Text = string.Concat("Server Time: ", DateTime.Now.ToLongTimeString()); 
} 

0

開始是ASP.NET Page Life Cycle Overview的地方,如果你編程方式將控件添加到一個asp.net頁面,那麼你應該熟悉它,如果你尚未=)

現在你的工作方式下此清單:

  1. 你是總是添加組件(在這個例子中的按鈕)到頁面?如果你不總是添加它們,那麼在回發之後,它們將不會在EventHandler被連接到的地方,以供處理器觸發。 (這可能不適用於由DirectEvent觸發的Ext.Net按鈕,但它不會受到傷害)。
  2. 你的web.config文件中是否有「常用的」Ext.Net處理程序/模塊註冊以啓用直接事件處理?
  3. 您是否驗證過您沒有收到任何阻止事件處理程序的JavaScript客戶端錯誤?
  4. 使用類似Fiddler的東西來驗證事件實際上是否將DirectEvent觸發回服務器。
2

有跡象表明,原始樣品中需要糾正的幾件事情:

  1. 默認情況下,Ext.NET按鈕組件的AutoPostBack(即重新加載整個頁面)。鼓勵使用DirectEvents(Ajax調用),如果您想與服務器通信並避免完整的頁面重新加載。
  2. Ext.NET組件應添加到父項.Items集合中,而不是.Controls集合。

下面是包含這些更正的完整演示。現在

<%@ Page Language="C#" %> 

<%@ Register assembly="Ext.Net" namespace="Ext.Net" tagprefix="ext" %> 

<script runat="server"> 
    protected override void OnInit(EventArgs e) 
    { 
     Ext.Net.Button btn = new Ext.Net.Button(); 

     btn.Text = "Submit (AutoPostBack)"; 
     btn.Click += Button1_Click; 

     // 1. Set to AutoPostBack, default is "false" 
     btn.AutoPostBack = true; 

     // 2. Add Button to .Items Collection  
     this.ViewPort1.Items.Add(btn); 

     base.OnInit(e); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     X.Msg.Notify("Server Time", DateTime.Now.ToLongTimeString()).Show(); 
    } 
</script> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Ext.NET Example</title> 
</head> 
<body> 
    <form runat="server"> 
     <ext:ResourceManager runat="server" /> 

     <ext:Viewport ID="ViewPort1" runat="server" /> 
    </form> 
</body> 
</html> 

,我建議你改變你的AutoPostBack按鈕單擊事件到DirectEvent點擊。這需要對代碼隱藏進行以下三個修訂。

<script runat="server"> 
    protected override void OnInit(EventArgs e) 
    { 
     Ext.Net.Button btn = new Ext.Net.Button(); 

     btn.Text = "Submit (DirectEvent)"; 

     // 2. CHANGE to .DirectClick 
     btn.DirectClick += Button1_Click; 

     // 3. REMOVE btn.AutoPostBack = true; 

     this.ViewPort1.Items.Add(btn); 

     base.OnInit(e); 
    } 

    // 3. CHANGE "EventArgs" to "DirectEventArgs"  
    protected void Button1_Click(object sender, DirectEventArgs e) 
    { 
     X.Msg.Notify("Server Time", DateTime.Now.ToLongTimeString()).Show(); 
    } 
</script> 

希望這有助於。

+0

感謝它工作:))))) – John 2011-02-15 15:50:46

0
<ext:Button ID="extBtn1" runat="server" Text="Cancel"> 
    <DirectEvents> 
     <Click OnEvent="extBtn1Click"> 
      <EventMask ShowMask="true" /> 
     </Click> 
    </DirectEvents> 
</ext:Button> 

這extBtn1Click事件將觸發服務器端。

0

當事件被觸發時,該按鈕不存在。這就是爲什麼它不起作用。如果你在aspx文件中構建一些測試按鈕,它就可以正常工作。

解決方案:您必須在OnInit事件過程中構造按鈕,以便在單擊該按鈕後的新頁面週期期間它會出現並綁定到EventHandler。

相關問題