2013-08-22 57 views
19

Tôi đã gặp phải sự cố tiếp theo:'System.Dynamic.DynamicObject' không chứa định nghĩa cho 'PropertyName'

Tôi đang cố chạy trang web NET MVC để sử dụng ViewBag để chuyển một số dữ liệu đến Lượt xem. Đây là phương pháp mà tôi thiết lập VeiwBag.

[HttpGet] 
[AllowAnonymous] 
public ActionResult Start() 
{ 
    ViewBag.BanReason = null; 
    int userId; 

    //Request with UserId, display ban reason if necessary 
    if (Request.Params["UserId"] != null && int.TryParse(Request.Params["UserId"], out userId)) 
    { 
     ViewBag.BanReason = CheckIfUserBanned(userId); 
    } 

    ViewBag.Users = MvcApplication.Users; 

    return View(); 
} 

Khi tôi gán giá trị cho các ViewBag (ví dụ ViewBag.BanReason = null;) Tôi đã có RuntimeBinderException với thông điệp

'System.Dynamic.DynamicObject' không chứa một định nghĩa cho 'BanReason'.

Tôi đang sử dụng Visual Studio 2012 với .NET 4.5 và máy chủ IIS cục bộ với ApplicationPool với .NET 4.0. Trên máy tính khác có cùng cấu hình, tất cả đều hoạt động tốt và không có ngoại lệ nào được ném.

Vui lòng không khuyên sử dụng các kỹ thuật khác như ViewData [""] và Tạo mô hình riêng biệt, tôi không muốn thay đổi mã hoạt động độc đáo trên máy khác.

Tôi nghĩ đây là sự cố cấu hình sai. Mọi dự đoán sẽ được đánh giá cao. Cảm ơn

+0

cho chúng ta thấy mã nơi bạn đang sử dụng 'ViewBag.BanReason' – Satpal

+0

Đó là sử dụng trong Start.cshtml @if (ViewBag.BanReason!= null) { } – Groove

+1

Bạn có thể đăng theo dõi ngăn xếp không? – Slavo

Trả lời

3

Tôi tin rằng đây là vấn đề của bạn từ một câu trả lời stackoverflow:

Như chúng ta có thể nhìn thấy bằng cách bình luận của bạn, bạn đang thiết lập các ViewBag.Message trong bộ điều khiển khác. ViewBag chỉ dành cho dữ liệu cho chế độ xem được đặt bởi trình điều khiển đã phục vụ chế độ xem.

Nếu bạn cần gửi nó từ bộ điều khiển khác, bạn nên sử dụng tham số trong phương thức hành động, sau đó bạn có thể đặt ViewBag.Message thành tham số được truyền vào.

ViewBag RuntimeBinderException (MVC 4, ASPX)

+0

Tôi đã thử và không hiệu quả. Vẫn gặp lỗi tương tự. – Groove

+0

Bạn vẫn nhận được ngoại lệ tương tự? –

+0

Có, tôi vẫn nhận được nó. – Groove

16

mã của bạn là tốt, ViewBag là có một động Properties, và trong Runtime tất cả các thuộc tính đang được giao.

Ngoại lệ này là ngoại lệ chung CLR .. Hãy thử thực hiện các bước Sau đây, nó sẽ hoạt động Tôi hy vọng. mở Visual Studio

  • Debug -> Exceptions -> (Bỏ chọn) Common Language Runtime Exceptions

nếu vẫn còn những vấn đề occures

  • Tools -> Options -> Debugging (Mở rộng) -> Chung -> (Chọn) Chỉ Bật Mã của tôi

hy vọng nó sẽ giúp, nó hoạt động với tôi

Click Here for Detailed Images

+2

Tôi nghĩ rằng vấn đề cốt lõi ở đây là DynamicObject đang sử dụng try/catch giống như if/else, không mở rộng cho hiệu suất, nó sẽ phá hủy CPU của bạn đặc biệt là trong các vòng lặp. –

+0

@KellyElton Tôi đồng ý. CLR dường như có thói quen nội bộ dựa vào các ngoại lệ "dự kiến". Đó là một thực hành thiết kế khá đáng lo ngại và làm cho gỡ lỗi một PITA lớn khi bạn không thể kích hoạt "Just My Code" vì những lý do khác. – Dan

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