Bạn hiểu nhầm cách hoạt động của ViewBag.
Khi làm việc trong MVC, và bạn mở một trang web, đây là những gì (khoảng) xảy ra:
- Phương pháp 'Index' của FooController được chạy. Cuối cùng, một View được trả về.
- Ứng dụng MVC của bạn sau đó sẽ tìm thấy chế độ xem cho bạn và bắt đầu hiển thị nó theo HTML mà nó tìm thấy trong tệp .aspx có liên quan. Nếu chương trình gặp các mục như "@ ViewBag.Id", về cơ bản nó sẽ làm một chuỗi thay thế bằng bất kỳ giá trị ".Id" nào. (Đó là một chút phức tạp hơn thế, nhưng vì lợi ích của đối số, nó về cơ bản hiện một chuỗi thay thế).
- Sau khi kết xuất, tài liệu HTML được gửi đến trình duyệt của bạn, sau đó sẽ hiển thị tài liệu đó.
Khi trình duyệt của bạn nhận được trang, ViewBag của bạn về cơ bản đã biến mất 'ngoài phạm vi'. Điều này là do ứng dụng ASP (MVC) của bạn sử dụng ViewBag, nhưng Javascript chỉ có phạm vi trong tài liệu trình duyệt web (đây là mã HTML đã được trả lại cho trình duyệt bởi ứng dụng, sau ViewBag đã biến mất Javascript không phải là một phần của ứng dụng MVC, chỉ là trang web kết quả
Vì vậy, câu trả lời ngắn gọn là, bạn không thể làm điều đó như thế. Hãy thử suy nghĩ về việc thay thế chuỗi nội tuyến Bạn chỉ có thể đặt giá trị ViewBag vào trang HTML, không phải theo cách khác xung quanh.
Giả sử Id của bạn là 5, mã sau trong tệp aspx:
$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});
sẽ được gửi đến trình duyệt như
$(".btn").on("click",function(){
5 = $(this).attr("id")
});
Kể từ khi trình duyệt của bạn chỉ nhìn thấy phần cuối cùng này, nó chỉ không có ý nghĩa trong Javascript. Trong trường hợp của bạn, Với lỗi cú pháp, nó chỉ có nghĩa là biến của bạn chưa được khởi tạo và bạn đang cố truy cập vào null
.
Tôi xin lỗi, tôi nhận thấy tôi quên nhập lỗi của mình –
Có lẽ '@ ViewBag.Id' không được xác định ở đâu đó nên không có đầu ra (thay vì lỗi), do đó phía bên tay trái của bài tập là không có gì . Kiểm tra mã của bạn để xem nơi '@ ViewBag.Id' được khai báo. – Bojangles