лучший способ отобразить результаты поиска на той же странице, что и элемент управления поиском в ASP.Net - PullRequest
1 голос
/ 08 мая 2009

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

1) Как передать выбранные условия поиска обратно на ту же страницу (или действительно в элемент управления, отображающий результаты) QUerystring, hiddenfield, session, viewstate (фактически скрытое поле)?

2) как мне на самом деле заставить страницу подчиняться себе.

извинения, если это немного основа, но я не эксперт ASP.Net

Ответы [ 2 ]

2 голосов
/ 08 мая 2009

Это пользовательские элементы управления, верно? Я думаю, что лучший способ общаться между UserControls - это использовать события. Создайте свой собственный класс EventArgs для инкапсуляции критериев поиска. Элемент управления отправкой вызывает событие, когда поиск отправляется, и содержащая его страница обрабатывает событие и вызывает метод в элементе управления результатами поиска для выполнения поиска и отображения результатов.

С другой стороны, элемент управления результатами может просто отвечать за отображение коллекции объектов, а элемент управления поиска фактически выполняет поиск и возвращает коллекцию в EventArgs.

Вот пример из набора основных элементов UserControls. ProjectList UserControl вызывает событие при выборе проекта:

public event EventHandler<ProjectSelectedEventArgs> ProjectSelected;

    protected void uxProjectList_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        if (ProjectSelected != null)
        {
            var keys = uxProjectList.DataKeys[uxProjectList.SelectedIndex].Values;
            var projectId = (Guid)keys[0];

            var args = new ProjectSelectedEventArgs(projectId);
            ProjectSelected(this, args);
        }
    }

Страница контейнера обрабатывает событие и вызывает метод в ProjectDetail UserControl для отображения деталей проекта.

    protected void uxHeroProjectList_ProjectSelected(object sender, ProjectSelectedEventArgs e)
    {

        uxProjectDetails.Visible = true;
        uxProjectDetails.DisplayDetails(e.ProjectId);
    }
2 голосов
/ 08 мая 2009

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

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

Плюсы:

  • Вы можете перейти на страницу результатов поиска из любой точки вашего сайта или с внешнего сайта, просто передав строку запроса.

  • Ваши результаты поиска могут быть легко просканированы, так как это всего лишь страницы вашего сайта.

  • Строки запроса довольно просты в использовании.

  • Пользователь может видеть, что именно он ищет в строке запроса. (Однако это может быть плохо в зависимости от его использования.)

  • Пользователи могут занести в закладки результаты своих поисков (Спасибо Фредрик Мёрк)

Минусы:

  • Возможно, вам понадобится время, чтобы критерии поиска выглядели симпатично. И.Е. Вы хотите, чтобы ваши пользователи просто видели идентификатор, который для них ничего не значит?

  • У вас могут быть проблемы с HTML-кодированием критериев поиска, так как они должны быть переданы в качестве аргумента строки запроса. Кодирование может быть выполнено легко, но может вызвать головную боль, если вы используете зарезервированные символы для других целей.

  • Ваши пользователи могут видеть, что они ищут. (Как я уже сказал, это может быть хорошо или плохо.)

  • Строка запроса может быть слишком длинной.

Возможно, есть некоторые другие вещи, о которых я не задумывался, но это дает вам представление.

Что касается публикации страницы обратно на себя, есть несколько способов сделать это, но попробуйте кнопку отправки или якорный тег со знаком # в качестве атрибута href.

Еще одна вещь, о которой стоит подумать, - это использовать переписатель URL, чтобы сделать вашу уродливую строку запроса привлекательным URL.

Например:

used_car_search.aspx? Сделать = брод & модель = фокус

Может стать:

used_ford_focus.html

Удачного кодирования:)

...