none
Как сделать страницу aspx с динамическим содержимым? RRS feed

  • Вопрос

  • Очень простой вопрос для тех, кто разбирается в Web Forms и очень сложный для меня, кто на нем сидит пару дней. Подскажите пожалуйста кто разбирается.

    Мне необходимо сделать похожую страницу:

    [Не могу вставить картинку, так как моя учетная запись еще не проверена :(, но есть http://smages.com/images/ihiapa.png ]

    Причем эта строки этой таблицы генерируются динамически в коде при нажатии кнопки:

     var newRow = new TableRow();
                    var tc = new TableCell();
                    var lb = new LinkButton();
                    lb.Click+=Links_Click;
                    lb.Controls.Add(new Image(){ImageUrl="/images/last.gif"});
                    tc.Controls.Add(lb);
                    newRow.Cells.Add(tc);

    Чтобы при нажатии ссылки срабатывал код на сервере я присваиваю событию метод 

    lb.Click+=Links_Click;

    , но разумеется это работать не станет, так как при POST-запросе линки не инициализируется.

    Как мне правильно сделать, чтобы было похожее поведение на странице?

    8 июня 2014 г. 14:44

Ответы

  • Можно использовать Listview, построить таблицу, добавить кнопки и использовать ItemCommand.

    http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.listview.itemcommand%28v=vs.110%29.aspx

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
  • "Будут ли корректно привязываться данные вью-стейта к кнопке, другими словами, не будет ли так, что при нажатии по кнопке, у нас будет промах?" - могут возникнуть проблемы с безопасностью. ASP.NET Web Forms не очень хорошо ладит с динамически сгенерированными контролами, особенно в гриде. Могут возникнуть проблемы с валидацией состояния представления и генерируемыми событиями (invalid postback or callback argument), возможно придётся отключить валидацию.

    "а как определить на какую кнопку мы нажали? можно еще присвоить туда дополнительную инфу? типа как ID в базе данных?" - на это вопрос ответ был даны выше.

    "после этого появилась в бд 1001-ая, после нажатия на кнопку в ячейке грида, отправляется Post-запрос, который выстраивает уже грид с 1001 строками. как в  этом случае быть?" - делать обратную отправку, и на сервере опять получать данные с БД. Это не оптимально, но в данном случае наиболее правильный подход.

    На дворе 2014 год, использовать Web Forms для CRUD приложений не очень разумно и оптимально (можно исключить приложения работающие с маленьким объёмом данных), особенно это касается масштабируемости приложений, не говоря о производительности. Я бы посоветовал с самого начала присмотреться к другим технологиям. Например с использованием гридов на JavaScript, вызовом сервисов Web API и SignalR на сервере используя JSON.


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
    10 июня 2014 г. 5:50
    Модератор
  • Насколько я понял, проблема у вас в порядке привязки элементов и наступлении событий. Посмотрите этот пример.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
    8 июня 2014 г. 19:09
    Модератор

Все ответы

  • Насколько я понял, проблема у вас в порядке привязки элементов и наступлении событий. Посмотрите этот пример.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
    8 июня 2014 г. 19:09
    Модератор
  • Спасибо. Но у меня есть вопросы.

    1. При нажатии на кнопку в гриде, будет происходить Pos-t-запрос с передачей всего ViewState страницы. Будут ли корректно привязываться данные вью-стейта к кнопке, другими словами, не будет ли так, что при нажатии по кнопке, у нас будет промах?

    2. а как определить на какую кнопку мы нажали? можно еще присвоить туда дополнительную инфу? типа как ID в базе данных?

    3. У меня немного по-другому нужно сделать на самом деле. в этом примере фиксированное количество строк в гриде. у меня наоборот заранее неизвестно. все подтягивается из бд и для каждой записи в бд создается строчка. при этом, у нас инициализируются строки каждый раз при Post-запросе. Но мы например изначально можем загрузить страницу с 1000 записями в гриде, после этого появилась в бд 1001-ая, после нажатия на кнопку в ячейке грида, отправляется Post-запрос, который выстраивает уже грид с 1001 строками. как в  этом случае быть?

  • Можно использовать Listview, построить таблицу, добавить кнопки и использовать ItemCommand.

    http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.listview.itemcommand%28v=vs.110%29.aspx

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
  • "Будут ли корректно привязываться данные вью-стейта к кнопке, другими словами, не будет ли так, что при нажатии по кнопке, у нас будет промах?" - могут возникнуть проблемы с безопасностью. ASP.NET Web Forms не очень хорошо ладит с динамически сгенерированными контролами, особенно в гриде. Могут возникнуть проблемы с валидацией состояния представления и генерируемыми событиями (invalid postback or callback argument), возможно придётся отключить валидацию.

    "а как определить на какую кнопку мы нажали? можно еще присвоить туда дополнительную инфу? типа как ID в базе данных?" - на это вопрос ответ был даны выше.

    "после этого появилась в бд 1001-ая, после нажатия на кнопку в ячейке грида, отправляется Post-запрос, который выстраивает уже грид с 1001 строками. как в  этом случае быть?" - делать обратную отправку, и на сервере опять получать данные с БД. Это не оптимально, но в данном случае наиболее правильный подход.

    На дворе 2014 год, использовать Web Forms для CRUD приложений не очень разумно и оптимально (можно исключить приложения работающие с маленьким объёмом данных), особенно это касается масштабируемости приложений, не говоря о производительности. Я бы посоветовал с самого начала присмотреться к другим технологиям. Например с использованием гридов на JavaScript, вызовом сервисов Web API и SignalR на сервере используя JSON.


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа xilinx123 10 июня 2014 г. 16:46
    10 июня 2014 г. 5:50
    Модератор
  • Можно использовать Listview, построить таблицу, добавить кнопки и использовать ItemCommand.

    http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.listview.itemcommand%28v=vs.110%29.aspx

    Спасибо большое за ответ, изучил документацию, использовал его в решении задачи, вроде получилось
    10 июня 2014 г. 16:44
  • "Будут ли корректно привязываться данные вью-стейта к кнопке, другими словами, не будет ли так, что при нажатии по кнопке, у нас будет промах?" - могут возникнуть проблемы с безопасностью. ASP.NET Web Forms не очень хорошо ладит с динамически сгенерированными контролами, особенно в гриде. Могут возникнуть проблемы с валидацией состояния представления и генерируемыми событиями (invalid postback or callback argument), возможно придётся отключить валидацию.

    "а как определить на какую кнопку мы нажали? можно еще присвоить туда дополнительную инфу? типа как ID в базе данных?" - на это вопрос ответ был даны выше.

    "после этого появилась в бд 1001-ая, после нажатия на кнопку в ячейке грида, отправляется Post-запрос, который выстраивает уже грид с 1001 строками. как в  этом случае быть?" - делать обратную отправку, и на сервере опять получать данные с БД. Это не оптимально, но в данном случае наиболее правильный подход.

    На дворе 2014 год, использовать Web Forms для CRUD приложений не очень разумно и оптимально (можно исключить приложения работающие с маленьким объёмом данных), особенно это касается масштабируемости приложений, не говоря о производительности. Я бы посоветовал с самого начала присмотреться к другим технологиям. Например с использованием гридов на JavaScript, вызовом сервисов Web API и SignalR на сервере используя JSON.


    Сделаем содержимое сообщества лучше, вместе!

    Спасибо за советы. Просто дали задание исправить и добавить новый функционал в существующий проект-динозавр
    10 июня 2014 г. 16:46