2011-03-30 37 views
6

Làm thế nào để bạn thiết lập SessionStateAttribute dưới dạng bộ lọc chung trong MVC3? Trong Global.asax của tôi, tôi có điều này trong phương thức RegisterGlobalFilters.MVC SessionStateAttribute không hoạt động như Thuộc tính toàn cầu

filters.Add(new SessionStateAttribute(SessionStateBehavior.Disabled)); 

Và trong bộ điều khiển chính của tôi, tôi có điều này.

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     Session["Blend"] = "Will it blend?"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

Nhưng vì lý do nào đó, nó vẫn cho phép tôi sử dụng Phiên. Tuy nhiên, nếu tôi trang trí lớp HomeController với thuộc tính, tôi nhận được một lỗi trên dòng sử dụng Session về một tham chiếu Object là null, mà tôi đoán là dự định nếu Session không bao giờ được tạo?

Tôi bắt đầu tự hỏi liệu có điều gì đó sai trái với dự án của tôi hay không. Tôi đã nhận được ít vấn đề như thế này với hành vi chuẩn là được cho là chỉ hoạt động.

Bất kỳ ai khác có vấn đề với những thứ như thế này?

Trả lời

11

SessionStateAttribute không phải là action filter, vì vậy bạn không thể thêm nó làm bộ lọc hành động toàn cầu. Đó là một thuộc tính đặc biệt cho phép bạn trang trí các bộ điều khiển của mình và có quyền kiểm soát chi tiết hơn đối với chế độ phiên cho mỗi bộ điều khiển.

Để vô hiệu hóa phiên toàn cầu cho toàn bộ ứng dụng đặt sau đây trong web.config của bạn:

<sessionState mode="Off" /> 
+5

Wow, đó là loại hài hước. Bạn sẽ ngạc nhiên về số lượng trang web mà tôi gặp phải khi sử dụng SessionStateAttribute làm ví dụ về cách sử dụng Global Filters trong MVC, tôi đoán không có ai trong số chúng thực sự _tested_ ví dụ của chúng trước khi đăng chúng lên internet :-P –

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