Совет для Создания динамического Управления “Расширенным поиском” в ASP.NET

Просто поместите пространство между своими классами

.area1 .item
{
    ...
}

, Вот очень хорошая ссылка для Селекторы CSS .

6
задан James Orr 10 September 2009 в 15:54
поделиться

4 ответа

I've been coding for about a day and I got this working beautifully using the third option I suggested in my question - old-school databound controls. Actually I only thought of the idea when I was forced to write out the question in detail - doesn't that just happen to you all the time?

I put my SearchCriterionControl into an asp:Repeater and bound it to my object collection. For the Field Chooser I put an asp:DropDownList inside a nested asp:Repeater and bound the Field array to that. Everything works beautifully, keeps state, actually required very little code. So I never had to dynamically add controls to the page, thank goodness.

Thanks for your suggestions, Ender, Matt and andrewWinn.

4
ответ дан 10 December 2019 в 00:41
поделиться

Я не могу предоставить вам точные шаги, которые вам нужно будет сделать, но я НАСТОЯТЕЛЬНО предлагаю изучить жизненный цикл страницы asp.net. Однажды я создал пользовательский элемент управления как DLL. Мне приходилось собирать данные обратной передачи на определенных этапах жизненного цикла и воссоздавать и перепривязывать данные на других этапах. Кроме того, такие мысли, как viewstate, также доступны только в определенных точках. Я знаю, что мне пришлось переопределить On_init, On_prerender и некоторые другие методы.

Извините, я ничем не могу больше помочь, но у меня нет кода с собой (это у старого работодателя). Надеюсь, это поможет.

2
ответ дан 10 December 2019 в 00:41
поделиться

Если вы динамически добавляете элементы управления в дерево элементов управления, вам также необходимо добавить их в почтовый пакет. Просто вызовите метод, который создает элемент управления для Page_Load или Page_Init, и элементы управления должны оставаться на странице при обратной передаче.

2
ответ дан 10 December 2019 в 00:41
поделиться

Поскольку никто больше не пытался это сделать в течение 2 часов, я брошу свою шляпу в кольцо с решением, которое вообще не полагается на состояние просмотра (или ASP.NET модель обратной передачи).

Что делать, если вы захватили все входные значения с помощью jQuery и вместо выполнения обратной передачи разместили сообщение на странице (или на новой странице results.aspx)? Или вы можете сделать все это асинхронным и выполнить Ajax-запрос к веб-методу, получить результаты и заполнить их на стороне клиента по мере необходимости?

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

Прочтите здесь для получения дополнительной информации об использовании jQuery для обращения к методу страницы ASP.NET. Помните - методы страницы должны быть статическими (это несложный контроль).

Я не уверен, что вы делаете на стороне сервера для построения вашего запроса, но я бы настоятельно рекомендовал LINQ. Раньше я выполнял аналогичную функцию «расширенного поиска» и после нескольких разных попыток обнаружил, что LINQ был прекрасным инструментом для решения этой проблемы, независимо от того, выполнял ли я SQL с LINQtoSQL или просто встречал коллекцию объектов в памяти.

Это сработало так хорошо, потому что 1) LINQ - это отложенное выполнение и 2) запрос LINQ возвращает другой запрашиваемый объект. Подразумевается, что вы можете связать свои запросы LINQ вместе, когда вы создаете их из своего ввода, вместо того, чтобы выполнять один массивный перевод предложения в SQL или любое другое хранилище данных, которое вы используете (одна из моих попыток заключалась в создании предложений SQL со строками, но по-прежнему передавала входные данные через SQLParameters для защиты от SQL-инъекций - это было беспорядочно и сложно, когда создавалось вручную LINQ был на порядки проще для понимания и реализации).

Например:

List<string> data; // or perhaps your a DB Context for LINQtoSQL?

var query = data.Where(item => item.contains("foo"));

if( {user supplies length search option} )
    query = query.Where(item => item.Length < 5);

// etc, etc.

// LINQ doesn't do anything until the query is iterated, at which point
// it will construct the SQL statement without you worrying about details or parameter binding
foreach(string value in query)
    ; // do something with the results

Из-за отложенного выполнения и запрашиваемого типа возвращаемого значения вы можете объединять запросы LINQ с этим выражением в течение всего дня и позволить ему беспокоиться о деталях реализации. (например, преобразование в запрос SQL) во время выполнения.

но все же передача входных данных через SQLParameters для защиты от SQL-инъекций - это было беспорядочно и сложно, когда вручную созданный LINQ был на порядки проще для понимания и реализации).

Например:

List<string> data; // or perhaps your a DB Context for LINQtoSQL?

var query = data.Where(item => item.contains("foo"));

if( {user supplies length search option} )
    query = query.Where(item => item.Length < 5);

// etc, etc.

// LINQ doesn't do anything until the query is iterated, at which point
// it will construct the SQL statement without you worrying about details or parameter binding
foreach(string value in query)
    ; // do something with the results

Из-за отложенного выполнения и запрашиваемого типа возврата , вы можете объединять запросы LINQ с этим выражением в течение всего дня и позволять ему беспокоиться о деталях реализации (таких как преобразование в запрос SQL) во время выполнения.

но все же передача входных данных через SQLParameters для защиты от SQL-инъекций - это было беспорядочно и сложно, когда вручную созданный LINQ был на порядки проще для понимания и реализации).

Например:

List<string> data; // or perhaps your a DB Context for LINQtoSQL?

var query = data.Where(item => item.contains("foo"));

if( {user supplies length search option} )
    query = query.Where(item => item.Length < 5);

// etc, etc.

// LINQ doesn't do anything until the query is iterated, at which point
// it will construct the SQL statement without you worrying about details or parameter binding
foreach(string value in query)
    ; // do something with the results

Из-за отложенного выполнения и запрашиваемого типа возврата , вы можете объединять запросы LINQ с этим выражением в течение всего дня и позволять ему беспокоиться о деталях реализации (таких как преобразование в запрос SQL) во время выполнения.

2
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: