В идеале (и RESTful) сценарий, вероятно, будет работать лучше всего так:
- Страница1 имеет форму с различными вариантами, необходимыми для построения фильтра.
- Форма страницы Page1 позволяетPage2 (которая также может быть Page1, но может показаться, что вы хотите, чтобы она была отдельной страницей).
- Страница2 считывает данные POST, выполняет фильтр, отображает результаты.
Для дополнительной гибкости Page2 должен проверять как элементы формы, так и элементы строки запроса.(Вы бы хотели решить, что переопределяет другое, в случае, если оба отправляются.) Таким образом, фильтр можно даже добавить в закладки или отправить коллеге по электронной почте.
Нет необходимости включать такие вещи, как сессия,куки и т. д. Это излишне усложняет ситуацию и делает сценарий менее переносимым и менее RESTful.
В этом сценарии следует отметить одну вещь - использование слова «страница».Хотя это может быть обычным явлением в мышлении WebForms (которое, как я полагаю, вы используете), вы должны понимать, что «сеть» на самом деле не имеет понятия «страницы».Это вопрос "ресурсов".
В этом случае ответ для Resource1 (который является запросом GET к Page1.aspx) является формой, которая имеет действие POST для Resource2 (который является запросом POST дляPage2.aspx), который отвечает некоторыми данными.Для достижения наилучших результатов проектирования вы должны мысленно разделять понятия «страницы» и «ресурсы и запросы».
В любом случае, вернемся к примерам.Страница1 будет иметь что-то вроде:
<form method="POST" action="Page2.aspx">
<input type="text" name="filterText" />
<button type="submit" name="filter" value="Filter" />
</form>
Вы заметите, что это сильно упрощено.Вы можете использовать серверные элементы управления ASP.NET для создания этого, вы можете создать его вручную в HTML и т. Д. Это действительно ваше дело.Лично я хотел бы, чтобы вывод был максимально скудным, но насколько вы хотите использовать инструментарий фреймворка, это ваш вызов.Я думаю, что для поддержки инструментов вы бы хотели изучить «Постраничную публикацию» в ASP.NET, поскольку WebForms обычно предполагает, что все является постбэк.Я думаю это просто вопрос установки PostBackUrl
на asp:button
в этом случае.
В коде для Page2 вы бы хотели посмотреть на Form
свойство объекта Request
.(Подробнее здесь .) У вас может быть что-то вроде:
if (!string.IsNullOrEmpty(Request.Form.AllKeys["filterText"]))
{
// Apply your filter when retrieving from the database. Simple if your database data comes back as a delayed-execution IEnumerable.
}
Как всегда, вы захотите выполнить проверку ввода, предотвратите любое внедрение SQL, если вы используете прямойSQL-запросы, обработка ошибок и т. Д. Но основная концепция выполняет свою работу.