Ext.Net按钮事件未触发

时间:2011-02-10 14:15:51

标签: c# asp.net extjs 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);
}

5 个答案:

答案 0 :(得分:2)

原始样本中有一些事情需要纠正:

  1. 默认情况下,Ext.NET按钮组件 AutoPostBack(即重新加载整个页面)。如果要与服务器通信并避免完整的页面重新加载,建议使用DirectEvents(Ajax调用)。
  2. 应将Ext.NET组件添加到父.Items集合,而不是.Controls集合。
  3. 这是一个包含这些更正的完整演示。

    示例

    <%@ 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 Button Click事件更改为DirectEvent Click。这将需要对代码隐藏进行以下三个修订。

    示例

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

    希望这有帮助。

答案 1 :(得分: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 :(得分: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());
}

答案 3 :(得分:0)

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

此extBtn1Click事件将在服务器端触发。

答案 4 :(得分:0)

触发事件时按钮不存在。这就是为什么它不起作用。如果你在aspx文件中构建一些测试按钮,那就可以了。

解决方案:您必须在OnInit事件期间构建按钮,以便在单击按钮后的新页面循环期间将其存在并绑定到EventHandler。