Просто поместите пространство между своими классами
.area1 .item
{
...
}
, Вот очень хорошая ссылка для Селекторы CSS .
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.
Я не могу предоставить вам точные шаги, которые вам нужно будет сделать, но я НАСТОЯТЕЛЬНО предлагаю изучить жизненный цикл страницы asp.net. Однажды я создал пользовательский элемент управления как DLL. Мне приходилось собирать данные обратной передачи на определенных этапах жизненного цикла и воссоздавать и перепривязывать данные на других этапах. Кроме того, такие мысли, как viewstate, также доступны только в определенных точках. Я знаю, что мне пришлось переопределить On_init, On_prerender и некоторые другие методы.
Извините, я ничем не могу больше помочь, но у меня нет кода с собой (это у старого работодателя). Надеюсь, это поможет.
Если вы динамически добавляете элементы управления в дерево элементов управления, вам также необходимо добавить их в почтовый пакет. Просто вызовите метод, который создает элемент управления для Page_Load или Page_Init, и элементы управления должны оставаться на странице при обратной передаче.
Поскольку никто больше не пытался это сделать в течение 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) во время выполнения.