2013-06-08 31 views
8

Tôi đã viết nhiều trang web với PHP. Bây giờ, tôi phải tạo trang web với ASP MVC 4 (C#) và tôi bị mắc kẹt với Phiên.Truy xuất các biến phiên vào ASP.NET MVC 4 (dao cạo, xem)

I.E. người dùng nên truy cập trang đăng nhập, nhập thông tin đăng nhập và mật khẩu của họ. Nếu họ là chính xác, trong điều khiển, tôi đặt phiên với UserId, như thế này:

Session["UserId"] = 10 

giá trị UserId này được sử dụng cho thấy PartialViews (mẫu đăng nhập hoặc (sau khi đăng nhập) một số menu ứng dụng). Làm thế nào tôi có thể có được UserId này bên trong xem Razor?

Sau này trong Xem:

if (Session.UserId == 10) { @Html.Partial("LoggedMenu") } 

tôi đã có ngoại lệ với StackOverflow. :/

+0

Bạn có thể thêm thẻ ASP hoặc thẻ tương tự không? –

+0

Dường như trong trường hợp này, bạn không nên sử dụng phiên. UserId phải là một phần của mô hình (hoặc nếu không phải là một phần của mô hình mà bạn có thể sử dụng ViewBag) sẽ được trình điều khiển xem lại. – Joel

+1

** Phiên là ác **, đặc biệt nếu bạn đang sử dụng Cloud Hosting ... hãy lưu ý! – balexandre

Trả lời

12

bạn đang làm nó sai ...

Session[<item name>] trả về một chuỗi, bạn nên so sánh với một chuỗi là tốt, hoặc đúc nó, vì vậy, một trong hai (int)Session["UserId"] == 10 hoặc Session["UserId"] = "10".

bạn cũng đang gọi thuộc tính không tồn tại Session.UserId sẽ không tồn tại dưới dạng Session giống như NameValueCollection, bạn gọi nó theo yêu cầu tên mục.

ở cuối, bạn nên viết

@if (Session["UserId"] == "10") { 
    Html.Partial("LoggedMenu"); 
} 

Bạn nói bạn đang học, vì vậy tôi muốn chỉ ra 2 thứ nhanh chóng:

  • Bạn nên tận dụng lợi thế của ASP.NET Khóa học MVC có sẵn miễn phí trong trang chủ http://asp.net/mvc (bên phải khi bạn đọc "Video Cần thiết")
  • Tạo dự án MVC3 và xem cách thực hiện nó khi nó sẵn sàng ra khỏi hộp với tư cách thành viên
+7

Tôi tin rằng 'Phiên [] 'trả về một đối tượng không phải là một chuỗi. –

2
@if (Session["UserId"] != null && Session["UserId"] == 10) { 
Html.Partial("LoggedMenu"); 
} 

Ngoài ra: để quản lý danh tính sử dụng tốt hơn ra khỏi hộp membership system

1

Dưới đây là một ví dụ:

Bộ điều khiển:

if (Session["pageInitCounter"] == null) 
    { 
     Session["pageInitCounter"] = 1; 
    } 
    else 
    { 
     int counter = Convert.ToInt32(Session["pageInitCounter"]); 
     counter++; 
     Session["pageInitCounter"] = counter; 
    } 

Xem:

@Html.Hidden("pageInitCounter", Session["pageInitCounter"]) 

Javascript:

alert($("#pageInitCounter").val()); 
+0

Nó hoạt động, nhưng tại sao "@ Html.Hidden (" pageInitCounter ", Session [" pageInitCounter "])", chúng ta có thể gọi Session trực tiếp trong cảnh báo không? – 123iamking

+1

alert() là javascript phía máy khách. Bạn cần phải viết máy chủ asp var vào trang cho javascript để có thể tham khảo nó. Flea thực hiện điều này bằng cách gọi trình trợ giúp @ Html.Hidden. – Hecatonchires

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