Что использовать для передачи данных между страницами в этом распространенном сценарии - PullRequest
1 голос
/ 25 апреля 2011

Мой сценарий заключается в том, что пользователь выбирает несколько параметров (для фильтрации записей), а затем он нажимает кнопку. Результат (извлеченные записи из БД) будет отображаться в виде новая страница .

Не могли бы вы показать мне шаги для этого? и какой метод будет использоваться для хранения данных? а также какие данные я буду хранить?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

В идеале (и RESTful) сценарий, вероятно, будет работать лучше всего так:

  1. Страница1 имеет форму с различными вариантами, необходимыми для построения фильтра.
  2. Форма страницы Page1 позволяетPage2 (которая также может быть Page1, но может показаться, что вы хотите, чтобы она была отдельной страницей).
  3. Страница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-запросы, обработка ошибок и т. Д. Но основная концепция выполняет свою работу.

1 голос
/ 25 апреля 2011

Вы можете передать его с помощью сеанса или передать с помощью GET.сеанс:

Session["Some_Name"] = parameter;
----------------------------------
retrive on the new page
parameter = (casting)Session["Some_Name"];

GET:

Response.Redirect(NewPage.aspx?parm1=p1?parm2=p2); // parm1,parm2 just a name. p1,p2 are paramters
----------------------------------
retrive on the new page
p1 = Request.QueryString["parm1"];
p2 = Request.QueryString["parm2"];

примечание:

  • При сохранении в сеансе тип параметра остается (вы можете переместить объект).
  • Когда вы перенаправляете с помощью GET, параметр перемещается как строка (вы не можете переместить объект).
  • Когда вы перенаправляете с помощью GET, параметр виден пользователю по адресу.
...