Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация postback вручную 
V
    Опции темы
KelTron
Дата 3.9.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Здравствуйте!

Есть, например, такой код:
Код

public partial class _Default : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
    }
    private void CreateButtons(int n) {
        for (int i = 0; i < 10; ++i) {
            Button btn = new Button();
            btn.Text = n.ToString() + i.ToString();
            btn.Click += new EventHandler(btn_Click);
            Panel1.Controls.Add(btn);
        }
    }
    void btn_Click(object sender, EventArgs e) {
        Button btn = (Button)sender;
        Label1.Text = btn.Text;
    }
    protected void LinkButton1_Click(object sender, EventArgs e) {
        CreateButtons(1);
    }
    protected void LinkButton2_Click(object sender, EventArgs e) {
        CreateButtons(2);
    }
}

На форме есть LabelPanel, и 2 LinkButton
При щелчке на одном из линк баттонов в панельке создаются кнопки, но при щелчке на любой из них происходит возврат формы и они все уничтожаются, следовательно не вызывается метод btn_Click.

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

public partial class _Default : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        int n = 1;
        if (ViewState["num"] != null) { 
            n = (int)ViewState["num"];       
        }
        CreateButtons(n);    
    }
    private void CreateButtons(int n) {
        for (int i = 0; i < 10; ++i) {
            Button btn = new Button();
            btn.Text = n.ToString() + i.ToString();
            btn.Click += new EventHandler(btn_Click);
            Panel1.Controls.Add(btn);
        }
    }
    void btn_Click(object sender, EventArgs e) {
        Button btn = (Button)sender;
        Label1.Text = btn.Text;
    }
    protected void LinkButton1_Click(object sender, EventArgs e) {
        ViewState["num"] = 1;
    }
    protected void LinkButton2_Click(object sender, EventArgs e) {
        ViewState["num"] = 2;
    }
}


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

Чтобы решить эту проблему мне в голову пришел такой способ: генерировать возврат формы программно при каждом щелчке на линк баттоне. 
Код

    protected void LinkButton1_Click(object sender, EventArgs e) {
        ViewState["num"] = 1;
        // Вот здесь должен генерироваться возврат формы
    }


Вопрос в том как? Погуглил, посмотрел в книжках, не нашел ничего подобного.
Подскажите пожалуйста как это сделать, или если есть другой способ очень хочется узнать его...)


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Idsa
Дата 3.9.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Можно, например, перенести создание кнопок в Page_PreRender.

Это сообщение отредактировал(а) Idsa - 3.9.2008, 12:31


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
KelTron
Дата 3.9.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Сделал так, кнопки стали отображаться как надо, но они перестали реагировать на нажатие. Метод btn_Click не вызывается...

Это сообщение отредактировал(а) KelTron - 3.9.2008, 13:43


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Idsa
Дата 3.9.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Ага. Точно. Проглядел.

Вижу парочку workaround'ов. Приведу самый простой.
1. Меняем код обработчиков кликов по LinkButton'ам:
Код

protected void LinkButton1_Click(object sender, EventArgs e)
        {
            ViewState["num"] = 1;
            this.Panel1.Controls.Clear();
            this.CreateButtons(1);            
        }
        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            ViewState["num"] = 2;
            this.Panel1.Controls.Clear();
            this.CreateButtons(2);
        }

При щелчке очищаем Panel1 и добавляем контент заново.
2. Добавляем в метод CreateButtons присвоение идентификатора:
Код

private void CreateButtons(int n)
        {
            for (int i = 0; i < 10; ++i)
            {
                Button btn = new Button();
                btn.ID = i.ToString(); //новая строчка
                btn.Text = n.ToString() + i.ToString();
                btn.Click += new EventHandler(btn_Click);
                Panel1.Controls.Add(btn);
            }
        }


Добавлено через 5 минут и 15 секунд
Предполагалось, что в Page_PreRender ничего не переносилось.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
KelTron
Дата 3.9.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Большое спасибо, теперь все работает.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.