Lỗi “Name ‘__o’ is not declared” trong trang ASP.NET


Khi viết ASP.NET, bạn có thể gặp trường hợp sau:

– Khi dịch VS sẽ báo lỗi “Name ‘__o’ is not declared”  ở những dòng có dạng output (<%=”my value”%>), mặc dù bạn không có bất kỳ biến nào có tên __o.

– Những dòng lỗi này sẽ bị gạch chân trong trình soạn thảo.

– Tuy nhiên khi chạy chương trình vẫn bình thường.

Lỗi này có nguyên nhân từ trình intelisense của Visual Studio, khi bạn viết chương trình, intellisense sẽ tự động dịch và xây dựng cấu trúc trang web để hỗ trợ tính năng “xổ” các thành phần của một đối tượng (như khi bạn gõ dấu chấm, chúng sẽ hiển thị danh sách các thành phần bên trong chẳng hạn). Mỗi khi bạn xuất ra một biến lần đầu tiên trong trang, nó sẽ khai báo một biến có tên __o để lưu giá trị biến đó, trong những lần xuất giá trị sau, biến này sẽ được dùng lại. Do vậy, nếu câu lệnh xuất đầu tiên của bạn nằm trong một khối lệnh, những câu lệnh xuất sau sẽ bị lỗi vì biến trên chỉ có thể được hiểu trong khối lệnh đó. Ví dụ:

<% if (true) { %>
    <%=1%>
    <% } %>
    <%=2%>

Đoạn lệnh này sẽ được dịch như sau:

if (true) { 
            object @__o;
            @__o = 1;
       }
       @__o = 2;

Ở đây, câu lệnh gán thứ 2 sẽ báo lỗi.

Sửa lỗi:

Vì đây là lỗi của M$ nên bạn không sửa được😀, nhưng bạn có thể dùng mẹo thêm câu lệnh giả <%=”” %> vào đầu trang để biến __o được sinh ra từ đầu.

Chúc thành công.

(Theo hướng dẫn của Mikhail Arkhipov tại http://forums.asp.net/p/923745/1266105.aspx)

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s