Событие кнопки Ext.Net не запускается - PullRequest
1 голос
/ 10 февраля 2011

Я использую Ext.Net и у меня проблема.

Я создаю динамические кнопки.Он работает, но если я нажму, событие кнопки не будет работать.

Ответы [ 5 ]

2 голосов
/ 11 февраля 2011

Есть несколько вещей, которые требуют исправления в исходном образце:

  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 голосов
/ 25 мая 2015

Кнопка отсутствует, когда происходит событие. Вот почему это не работает. Если вы создадите какую-нибудь кнопку тестирования в aspx-файле, она будет работать нормально.

Решение: Вы должны создать кнопку во время события OnInit, чтобы она присутствовала и была привязана к EventHandler во время нового цикла страницы после нажатия кнопки.

0 голосов
/ 01 июня 2012
<ext:Button ID="extBtn1" runat="server" Text="Cancel">
    <DirectEvents>
        <Click OnEvent="extBtn1Click">
            <EventMask ShowMask="true" />
        </Click>
    </DirectEvents>
</ext:Button>

Это событие extBtn1Click будет запускаться на стороне сервера.

0 голосов
/ 28 апреля 2011

Используйте 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 голосов
/ 10 февраля 2011

С чего начать - Обзор жизненного цикла страницы ASP.NET .Если вы программно добавляете элементы управления на страницу asp.net, вам следует ознакомиться с ней, если вы еще этого не сделали =)

Теперь перейдите к следующему контрольному списку:

  1. Вы всегда добавляете компоненты (кнопки в данном случае) на страницу?Если вы не добавите их * всегда, то на постбэк они не будут доступны для EventHandler, к которому будет подключен обработчик.(Это может не относиться к кнопке Ext.Net, запускаемой DirectEvent, но это не может повредить).
  2. Есть ли у вас "обычные" регистрации обработчиков / модулей Ext.Net в вашем файле web.configчтобы разрешить обработку прямых событий?
  3. Вы убедились, что не получаете никаких ошибок javascript на стороне клиента, которые мешают обработчику событий?
  4. Использовать что-то вроде Fiddler для проверки того, что событие фактически запускает DirectEvent обратно на сервер.
...