2013-03-13 5 views
2

Ситуация: - Существует страница Home.aspx, которая может быть открыта уникальной переменной пользователя (переменная userName).Http.Page.Request [""] не возвращает правильные значения

Эта страница имеет управляющее имя всплывающего окна 'alertWindow'.

В событии pageLoad из Home.aspx.cs страница Welcome.aspx открывается в 'alertWindow' с использованием свойства NavigateUrl.

В строке запроса, переданной на страницу Welcome.aspx, содержится параметр «UserName», и этот параметр установлен на имя пользователя в журнале (переменная «userName»).

Теперь, когда выполнение кода происходит на странице Welcome.aspx.cs, «Request [« UserName »]» используется для получения/получения текущего параметра «имя_пользователя», существующего в строке запроса.

Выпуск: - Когда имя вошедшего в систему пользователя, имеет место или другие не обычные символы, а затем «Request [» UserName «]. ToString()» не получить фактический и правильное значение.

Для примера. если зарегистрированное в «userName» = «A & T Telecom», то «Request [« UserName »]. ToString() извлекает только« A »и ничего больше.

Но если строка userName является правильным значением, например "Мичил", затем "Request [" UserName "]. ToString() возвращает только "Micheal" правильно

Требования: - Просьба так, чтобы я получить правильное значение из запроса [" UserName "] для любого строкового значения «userName».

Home.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (user is valid) 
     alertWindow.NavigateUrl = "Welcome.aspx?userName=" + currentUser.ToString(); 
} 

Welcome.aspx.cs: -

currentUserName = Request["userName"].ToString(); 

ответ

3

Это логично, потому что вы не Encode your url. Попробуйте это:

alertWindow.NavigateUrl = "Welcome.aspx?userName=" + Server.UrlEncode(currentUser.ToString()); 

Сказать несколько, они некоторые специальные символы, которые используются на URL, как

:/# ? & @ % + (and the space).

Все символы должны быть закодированы в другом формате, поэтому URL-адрес не будет прерываться, этот UrlEncode сделает именно это.

Две ноты.

  1. Я выбираю Server назвать UrlEncode, потому что это не зависит от запроса, и вы можете использовать его в потоке, или любой функции, которая не вызывается из страницы.
  2. Request.QueryString make UrlDecode, когда вы его используете.Чтобы получить шифровать URL вы называете Request.RawUrl
+1

Великий объяснение Короче говоря, упомянутые в Две заметки. Спасибо тонне Aristos. Сутион работал. – Kings

1

Вы не можете добавить пробелы в свой адрес, он должен кодирования так:

//uses HttpUtility.UrlEncode internally 

Server.UrlEncode("something with spaces"); 

или

HttpUtility.UrlEncode("something with spaces"); 
Смежные вопросы