2012-05-21 41 views
5

Tôi đang so sánh biến phiên với chuỗi để kiểm tra xem loại đăng nhập có phải là quản trị viên hay không.so sánh giá trị biến phiên với chuỗi

Mã tôi đang sử dụng:

if (Session["loggedInUsername"] == null) 
     { 
      btnLogin.Text = "Sign In"; 
      lblWelcome.Text = "Welcome!"; 
      hypManageRestaurants.Enabled = false; 
      hypManageReviews.Enabled = false; 
      hypPostReviews.Enabled = false; 

     } 
     else 
     { 
      if (Session["loggedInUserType"] == "Administrator") 
      { 
       hypManageRestaurants.Enabled = true; 
       hypManageReviews.Enabled = true; 
       hypPostReviews.Enabled = true; 
      } 
      else 
      { 
       hypManageRestaurants.Enabled = false; 
       hypManageReviews.Enabled = false; 
       hypPostReviews.Enabled = true; 
      } 
      lblWelcome.Text = "Welcome " + Session["loggedInUsername"]; 

      btnLogin.Text = "Sign Out"; 
     } 

Vì vậy, đầu tiên tôi kiểm tra nếu có người dùng đã đăng nhập hay không. Nếu người dùng đăng nhập thành công, biến phiên "loggedInUsername" sẽ có giá trị của tên người dùng. Nếu biến phiên "loggedInUsername" không trống, nó sẽ kiểm tra biến phiên "loggedInUserType" cho loại người dùng đã đăng nhập.

Đây là điều kỳ lạ, giá trị của "loggedInUserType" chính xác là "Quản trị viên" mà không có "", ở hàm if nơi tôi so sánh biến phiên với chuỗi "Quản trị viên" đang bị bỏ qua và chuyển đến người khác.

Tất cả các biến session đang nhận được giá trị khi người dùng đăng nhập.

Dưới đây là số liệu mà tôi đang sử dụng để đăng nhập và kỷ lục này là kỷ lục duy nhất trong đó có một loại "Administrator".

link to image

Có phương pháp nào khác để so sánh một biến phiên thành một chuỗi

+0

Làm thế nào để bạn có nghĩa là nó đang được bỏ qua? Nó có đi vào câu khác không? Nó có thể là một vấn đề đúc. Hãy thử một trong hai Object.ReferenceEquals (a, b) hoặc "Administrator" .Equals (Session ["..."]) –

+1

Sử dụng [Nhà cung cấp tư cách thành viên] (http://msdn.microsoft.com/en-us/library/ yh26yfzy.aspx) thay vào đó. –

Trả lời

3

Cast giá trị loại đối tượng thành một chuỗi

((string)Session["loggedInUserType"]) == "Administrator" 
+0

Yep, đúc thành chuỗi hoạt động, cảm ơn – drinu16

1

Hãy thử điều này:

if (Session["loggedInUserType"].ToString().Trim() 
     .Equals("Administrator", StringComparison.InvariantCultureIgnoreCase)) 
4

Hãy thử

if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) ...

+0

Phương pháp này cũng hoạt động :) nhưng tôi không biết nếu tôi có thể đánh dấu 2 câu trả lời xD – drinu16

0

Bạn có chắc chắn rằng tất cả khoảng trắng đã được tr được bắt đầu từ cuối phiên ["loggedInUserType"]?

0
if (Session["loggedInUserType"].ToString() == "Administrator") 
0

Bộ sưu tập Session trả về giá trị kiểu Object, vì vậy khi bạn so sánh với một chuỗi bạn sẽ được so sánh giá trị của các tham chiếu đối tượng, không so sánh các giá trị chuỗi.

Cast đối tượng tham chiếu đến string:

if (((string)Session["loggedInUserType"]) == "Administrator") 
0

Bạn có thể làm điều này:

string session = (string)Session["loggedInUserType"] 

if (session == "Administrator") 

hoặc Session bạn có thể là trong một lớp học cụ thể với thu khí.

0
if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) 

Bằng cách này, không cần phải kiểm tra giá trị null bởi vì Convert.ToString xử lý trả lại giá trị Null "" chuỗi rỗng

Các vấn đề liên quan