2013-06-10 2 views
0

ViewState를 실험하기 시작했습니다. 내가 사용하려는 이유는 사용자가 성공적으로 로그인 할 때 웹 페이지 (Web Forms Project)에 사용자 이름의 값을 추가하기 위해서입니다.상태 유지에 가장 좋은 해결책

성공한 로그인시 로그인 후 이름을 지정하고 리디렉션 사용자를 Default.aspx로 지정합니다.

ViewState.Add("UserFirstName", name); 
Response.Redirect("Default.aspx"); 

기본 페이지가로드되면 검색을 시도하여 값을 검색하고 Site.Master의 레이블에 지정합니다.

그러나 값은 null입니다. 내가 건너 온다면

userName = ViewState["UserFirstName"].ToString(); 
     SiteMaster master = (SiteMaster)Page.Master; 
     master.labelInfo = "<strong>Welcome</strong> " + userName; 

죄송 극도로 무지와 미숙하지만의 QueryStrings 또는 세션 변수를 사용하지 않고이 사용자 이름 값을 유지하는 가장 좋은 방법은 무엇입니까?

+1

관련 항목 : http://stackoverflow.com/questions/14430003/viewstate-disappears-on-response-redirect –

답변

3

ViewState는 동일한 페이지에있는 경우에만 유지 관리됩니다. 그래서 다른 페이지로 리디렉션 할 때 값이 NULL입니다. ViewState는 페이지 내의 Base-64로 인코딩 된 숨겨진 필드에 보관됩니다.

Session["Username"]=name; 
Response.Redirect("Default.aspx"); 

그리고 당신이 명시 적으로 정말 가장 적합한 (세션 변수를 사용하지 않기 때문에 Default.aspx

string name = Session["Username"]; 
1

에 : 당신이 뭘 하려는지를 들어, Session 더 나은 선택이 될 것입니다 방법은 사용자가 사용자 이름을 저장하기 위해 로그인 할 때 쿠키를 설정하고 각 후속 페이지에서 해당 쿠키를 읽는 것입니다. 물론 이것은 세션 상태를 사용하는 것과 크게 다르지 않습니다. 가치가있는 것을 위해 훨씬 덜 안전합니다).

1

ViewState는 HiddenField에 포함 된 인코딩 된 데이터를 통해 유지 관리됩니다. 일단 페이지를 떠나면 HiddenField는 더 이상 사용할 수 없습니다.

세션 변수가 세션 변수를 공유하고 있지만 세션을 사용하는 것이 가장 좋은 방법입니다. TempData라는 MVC를 구현해야하지만 MVC에서 사용할 수있는 개념이 있습니다. 아이디어는 기본적으로 모든 읽기가 해당 항목을 지워지도록하거나 모든 페이지로드가 전체 TempData 사전을 죽일 수 있도록 세션에서 개최되는 사전을 래핑하는 것입니다.

Session은 본질적으로 범위를 벗어나는 내용이없는 전역 변수이므로 TempData와 같은 솔루션은 한 페이지에서 다음 페이지로 정보를 전송하는 것이 더 좋습니다. 그것으로 끝났다.