2009-05-30 2 views
2

Я хочу знать, что лучшая практика для передачи значений (иногда несколько значений) между двумя страницами asp.netКакие варианты я должен передать значение между двумя страницами asp.net

В прошлом у меня есть б строки запроса передать значение в осины, как это:

href='<%# Eval("TestID","../Net/TestPage.aspx?TestID={0}") %>'><%#Eval("Title")%> </a> 

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

Я также предполагаю, что можно передать более одного значения.

Может ли кто-нибудь предоставить мне фрагмент VB, который дал бы мне представление о том, как это сделать?

ответ

5

У вас есть много вариантов передачи данных, и все они могут передавать несколько значений между страницами.

Вы можете использовать Request.Form коллекцию, чтобы захватить ценности, которые были представлены из HTML формы с глаголом POST (т.е. «метод =» POST ">)

код выглядит примерно так:.

Dim formvalue As String 
formValue = Request.Form("FormField1") 

Вы также можете использовать параметры в URL query string (много, как вы, например):

Dim queryStringValue As String 
queryStringValue = Request.QueryString("QueryStringValue1") 

Вы можете установить cookie (это срок службы будет зависеть от установленного вами значения свойства Expiry):

Настройка файла cookie (обратите внимание: здесь вы используете объект HttpResponse. Браузер пользователя хранит куки, когда он принимает значение заголовка HTTP Set-Cookie из ответа на запрос)

Response.Cookies("CookieValue") = "My Cookie Data" 
Response.Cookies("CookieValue").Expires = DateTime.Now.AddDays(1) ' optional, expires tomorrow 

Получение значения куков (мы используем HttpRequest объект здесь):

Dim cookieValue As String 
cookieValue = Request.Cookies("CookieValue") 

Вы можете использовать объект HttpSessionState (доступный через свойство Session страницы). Чтобы установить переменную сеанса:

Session["SessionValue"] = "My Session Value" 

Для получения значения сеанса:

Dim sessionValue As String 
sessionValue = Session["SessionValue"] 

Там еще один способ передать состояние страницы между страницами с помощью Page.Transfer (см How to: Pass Values Between ASP.NET Web Pages), но я бы попробовать и освоиться с выше, прежде чем смотреть на это.


Что касается лучших практик, это зависит от того, какие данные вы передаете.

  • Не пасса конфиденциальных данных с помощью URL (строки запроса), формы или печенья. Они могут перехватываться различными способами.
  • Передача конфиденциальных данных с использованием хранилища на стороне сервера (например, состояния сеанса или базы данных), но подумайте над тем, как безопасно хранить идентификатор сеанса.
  • Никогда данные доверия извне вашего приложения (данные, которые пользователи ввели через форму, информацию, считанную из базы данных и т. Д.). Всегда кодируйте эту информацию, прежде чем отображать ее снова на своих страницах. Это предотвращает использование Cross-Site Scripting (a.k.a XSS) attacks.
  • Не используйте последовательные идентификаторы в строках запросов, в которых вы передаете идентификаторы пользователя между страницами. Предположим, вы создали страницу Orders.aspx, в которой перечислены все заказы для клиента. Вы передаете параметр CustID через строку запроса: Orders.aspx? CustID = 123. Пользователю легко изменить URL-адрес в Orders.aspx? CustID = 124 и просмотреть информацию, которую они не должны. Вы можете обойти это, выполнив проверку, что текущему пользователю разрешено видеть информацию, вы можете использовать идентификатор, который не может быть легко угадан (обычно GUID) или передавать информацию на стороне сервера.
1

Вы можете использовать сеанс, куки, строку запроса, скрытые поля формы в запросе на отправку.

+0

Можете ли вы использовать скрытые поля формы для межстраничного запроса asp.net? – Andomar

+0

@Andomar: вы можете использовать метод Page.PreviousPage.FindControl ("hiddenControl") для доступа к скрытому полю. Ссылка: http://www.codeproject.com/KB/aspnet/CrossPagePosting.aspx – Kirtan

Смежные вопросы