2010-04-13 30 views
5

Tôi đang cố gắng hiểu cách Eval() hoạt động cho một mục đích cụ thể. Tôi đang làm việc trên một dự án tôi không thực sự biết và tôi cần phải đọc một số dữ liệu và đặt chúng trong danh sách thả xuống. Những dữ liệu này đã được đọc và được hiển thị bên trong một ItemTemplate. Tôi nhận thấy có đọc bằng phương thức Eval(). Một cái gì đó như:ASP .NET - Điều gì đang xảy ra phía sau một Eval()?

<ItemTemplate> 
    <a href="...=<%# Eval("foo") %>></a> 
</ItemTemplate> 

Tôi cần biết nơi Eval đang lấy những dữ liệu này để khám phá nơi tôi nên đọc chúng cho danh sách thả xuống của mình! Nhưng tôi thực sự không hiểu nó hoạt động như thế nào! Tôi biết rằng Eval() đánh giá các biểu thức ràng buộc dữ liệu trong thời gian chạy nhưng bạn nghĩ tôi nên xem xét ở đâu?

Cảm ơn bạn

Trả lời

2

Eval là lối tắt, sắp xếp. Tuy nhiên, đây là một cuộc gọi phương thức thực tế, không giống như Bind, giống như một đoạn mã.

Bài viết MSDN trên Data-Binding Expressions sẽ cung cấp cho bạn tổng quan thực sự tốt.

Đặt một cách đơn giản, trình phân tích cú pháp khi đọc trang, gọi DataBinder.Eval và chuyển vào DataItem hiện tại trong ngữ cảnh cùng với chuỗi mà bạn chỉ định. Nó giống như đọc các cột từ một DataReader.

DataItem trong ngữ cảnh phụ thuộc vào nơi điều này đang xảy ra. Trong một GridView, điều này có thể sẽ giống như một đối tượng DataRow trong một DataTable mà GridView đã bị ràng buộc, nhưng nó có thể là bất kỳ đối tượng nào thực sự vì nó hoạt động thông qua sự phản chiếu. Trong trường hợp của một DataRow, Eval ("Foo") sẽ cố gắng trích xuất dữ liệu từ cột Foo của DataRow.

Bạn có thể thấy bây giờ nơi điều này có thể xấu. Nếu DataRow ngừng bao gồm một cột Foo, thì cuộc gọi Eval sẽ thất bại thảm hại nhưng không cho đến khi chạy vì không có kiểm tra loại/tên mạnh nào có liên quan.

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