2

빠른 시나리오. 내 페이지에있는페이지가 일정 시간 동안로드 된 후 쿼리 문자열 값이 손실되는 이유는 무엇입니까?

지금처럼 쿼리 문자열을 사용하여, 그것을 취소하는 경우에 세션 변수에 값을 복원하려고 :

if(Session["species"] == null || Session["species"] == "") 
{ 
    Session["species"] = Request["species"]; 
} 

을 더 아래로, 나는 하나의 값을 설정 그래서 같은이 세션 변수의 값을 기반으로 다른 두 세션 변수,의 그러나

if((string)Session["species"]=="Canine") 
{ 
    Session["dBreed"] = Request.Form["breed"].Trim(); 
} 
else if((string)Session["species"]=="Feline") 
{ 
    Session["cBreed"] = Request.Form["breed"].Trim(); 
} 

, 세션 시간이 초과 (20 분 후, 나는 믿는다) 일단, 난 아직도이 오류가 보인다 :

Object reference not set to an instance of an object. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 


Line 134:   errorMessage = "The data received from the \"Age\" field was invalid."; 
Line 135:  } 
Line 136:  if(((string)Session["dBreed"]).Length > 50) 
Line 137:  { 
Line 138:   errorMessage = "The data received from the \"Breed\" field was invalid."; 

Source File: c:\Users\cradebaugh\Documents\My Web Sites\Vaccinations\InputEntry.cshtml  

(ERRORS ON): Line: 136 

명확하게, 나는 Session [ "dBreed"]의 값이 할당되지 않았 음을 이해합니다. 이는 Session [ "species"] 변수가 지워진 후에 결코 재 할당되지 않음을 의미합니다.

내 질문은 : 특정 시간이 지나면 페이지에서 요청 문자열 (Request [ "species"]를 사용)을 요청하는 것이 좋습니까? 아니면 다른 문제가 있습니까?

실제로 내 URL의 쿼리 문자열을 볼 수 있지만 요청한 값이 세션 시간 초과시 더 이상 존재하지 않는 것으로 보입니다.

이미 숨겨진 입력 필드를 사용하여 위와 같은 목표를 달성하려고하지만이 방법으로 쿼리 문자열 사용의 특성을 이해하는 것이 가장 좋습니다. 미래.

시간 내 주셔서 감사 드리며 도움을 제공해주세요.

답변

2

... the value of Session["dBreed"] was never assigned, which can mean only that Session["species"] variable never got reassigned ...

또는 Session["species"]"Feline"으로 설정되었습니다. 두 번째 코드 블록에서 상대 : 종은 "Feline"입니다

else if((string)Session["species"]=="Feline") 
{ 
    Session["cBreed"] = Request.Form["breed"].Trim(); 
} 

경우, 당신은 Session["cBreed"]하지 Session["dBreed"]을 할당합니다.

+0

이것은 진행되고있는 것으로 보입니다. 세션 변수가 플로팅 된 경우에만 호출하거나 사용하려고한다는 것을 잊어 버렸지 만 코드에서이를 포함하는 것을 완전히 잊어 버리면 컴파일러 오류가 발생한다는 것을 의미합니다. 나는 그게 맞습니까? – VoidKing

+0

답변 주셔서 감사합니다. 솔직히, 나는 이것을 보았어 야했지만 때때로, 놓치기가 너무 쉽다. 나는 (원래 생각한대로) 질의 문자열이 제한된 시간이 아니라 (요청)에 사용할 수 있다는 것을 알게되어 기쁩니다. – VoidKing

+1

@VoidKing : 컴파일러 오류가 발생하지 않습니다. 'null' 인'string'의'Length' 속성에 접근하려고하면 예외가 발생합니다. '((string) Session [ "dBreed"]). Length' 그리고'Session [ "dBreed"]'가'null'을 반환하면'Length' 속성은'NullReferenceException'을 던집니다. –