2012-08-14 30 views
16

Tôi chỉ muốn hỏi, có cách nào để thiết lập giá trị watchbag tự động bằng cách sử dụng jquery không? tôi cố gắng mã này trong kịch bản của tôi,Thiết lập giá trị trong ViewBag bằng cách sử dụng Jquery

$(".btn").on("click",function(){ 
@ViewBag.Id = $(this).attr("id") 
}); 

i dont know nếu nó đúng nhưng khi tôi cố gắng để chạy dự án MVC 3 của tôi, lỗi này xuất hiện trong firebug tôi

Syntax Error 
    = $(this).attr("id") 

Xin vui lòng giúp. Cảm ơn

+0

Tôi xin lỗi, tôi nhận thấy tôi quên nhập lỗi của mình –

+0

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

Trả lời

36

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:

  1. Phương pháp 'Index' của FooController được chạy. Cuối cùng, một View được trả về.
  2. Ứ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ế).
  3. 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.

+0

Cảm ơn Flater. bây giờ tôi thực sự hiểu điểm của bạn. Tôi chỉ có thể hiển thị giá trị của viewbag nhưng đặt một giá trị vào nó bằng cách sử dụng jquery là imposible. Cảm ơn rất nhiều. –

+0

Có cách nào thay thế cho các loại giải pháp này không. – ashveli

+0

@ anvesh.veerelli: Nếu bạn muốn máy chủ nhận thức được sự thay đổi được thực hiện trên trang web; trang web của bạn cần kết nối lại với máy chủ. Điều này có thể được thực hiện bằng nhiều cách, khác nhau, từ các bài viết biểu mẫu, các cuộc gọi ajax đến các giải pháp phức tạp hơn như SignalR. Câu hỏi của bạn là rất rộng khi nó đứng. – Flater

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