Tên 'tên điều khiển' không tồn tại trong ngữ cảnh hiện tại


79

Tôi có một ứng dụng web mà tôi đang làm việc (ASP.NET2.0 với C #, sử dụng VS2005). Mọi thứ đang hoạt động tốt, và đột nhiên tôi nhận được lỗi:

Error 1 The name 'Label1' does not exist in the current context

và 43 người khác cùng loại cho mỗi lần tôi sử dụng điều khiển ở phần mã phía sau trang.

Điều này chỉ xảy ra cho 1 trang. Và nó như thể mã phía sau không nhận ra các điều khiển. Một điều thú vị khác là intellisense cũng không chọn bất kỳ điều khiển nào ..

Tôi đã cố gắng xóa tệp giải pháp, xóa tệp obj, loại trừ các tệp khỏi dự án sau đó thêm lại chúng, đóng VS và khởi động lại nó, thậm chí khởi động lại máy tính của tôi, nhưng không có cách nào trong số này hoạt động.


2
Câu trả lời đúng cho điều này là trong câu trả lời được tìm thấy ở đây: stackoverflow.com/a/1981228/168703
JonH

1
Ngoài ra, hãy kiểm tra không gian tên trong Designer.cs đôi khi sau khi đổi tên một trang aspx, vùng chứa tên chỉ bị xóa khỏi Designer.cs.
Ashraf Abusada

Điều này có thể xảy ra sau khi sao chép đánh dấu cho điều khiển từ tệp .aspx khác. Tôi đã xóa đánh dấu đã sao chép và đánh dấu kiểm soát viết theo cách thủ công và lỗi đã biến mất.
Milind Bankar

Câu trả lời:


48

Kiểm tra mã của bạn đằng sau tên tệp và thuộc tính Kế thừa trên chỉ thị @Page, đảm bảo cả hai đều khớp.


1
Đó cũng là mẹo cho tôi! Không gian tên bị sai và khi tôi sửa nó trong chỉ thị @Page, các lỗi đã biến mất.
East of Nowhere

1
Tương tự ở đây, với một bổ sung nhỏ: Đảm bảo rằng bạn đang kiểm tra xem nó có tên lớp đủ điều kiện hay không. Vì lý do nào đó, VS đã đổi tên của tôi thành Inherits = "KioskB" khi nó cần là "MyNamespace.KioskB". Nó trông đúng cho đến khi tôi so sánh đánh dấu với một trang khác và nhận thấy phần không gian tên đã biến mất.
Kevin

117

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã gặp vấn đề tương tự và muốn đăng giải pháp của mình trong trường hợp nó có thể mang lại lợi ích cho người khác. Tôi đã gặp sự cố khi học cách sử dụng:

  • ASP.NET 3.5
  • C #
  • VS2008

Tôi đang cố gắng tạo một trang hỗ trợ AJAX (xem hướng dẫn về cách sử dụng đối tượng ScriptManager nếu bạn chưa quen với điều này). Tôi đã cố gắng truy cập các phần tử HTML trong trang thông qua mã C # và tôi gặp lỗi khi cho biết mã định danh cho giá trị HTML ID "không tồn tại trong ngữ cảnh hiện tại".

Để giải quyết nó, tôi phải làm như sau:

1. Chạy tại máy chủ

Để truy cập phần tử HTML dưới dạng một biến trong mã C #, giá trị sau phải được đặt trong thẻ phần tử HTML trong tệp aspx:

runat="server"

Một số đối tượng trong Hộp công cụ trong Visual Studio IDE không tự động bao gồm giá trị này khi được thêm vào trang.

2. Tạo lại tệp C # được tạo tự động:

  • Trong Trình khám phá giải pháp, bên dưới tệp aspx phải có hai tệp: * .aspx.cs và * .aspx.designer.cs. Tệp thiết kế được tạo tự động.
  • Xóa tệp * .aspx.designer.cs hiện có. Đảm bảo rằng bạn chỉ xóa tệp thiết kế . Đừng xóa cái khác vì nó chứa mã C # của bạn cho trang.
  • Nhấp chuột phải vào tệp aspx chính. Trong menu bật lên, chọn Chuyển đổi sang Ứng dụng Web .

Bây giờ phần tử sẽ có thể truy cập được trong tệp mã C #.


2
fyi nhấp chuột phải vào tùy chọn "Chuyển đổi sang Ứng dụng Web" cũng có sẵn trên các thư mục và dự án.
Dana Benson

9
tùy chọn số 2 là câu trả lời hoàn hảo cho tôi trong việc giải quyết vấn đề này khi tôi gặp phải nó ngày hôm nay!
MikeScott8

19
FYI trong Visual Studio 2013, tùy chọn "Chuyển đổi sang ứng dụng web" đã chuyển đến menu Dự án: stackoverflow.com/questions/19561982/…
Mark Nugent

1
xóa và tạo lại tệp thiết kế đã làm việc cho tôi - cảm ơn
CJM

3
Điều này hoạt động bằng cách sử dụng menu Dự án. Lưu ý: thẻ <% @ Page của tệp .aspx nên sử dụng 'Codebehind' chứ không phải 'Codefile'
KR

34

loại trừ bất kỳ trang nào khác tham chiếu đến cùng một tệp mã phía sau, ví dụ: một trang cũ hơn mà bạn đã sao chép và dán.


hoặc sao chép phần tử 'Label1' sang trang khác đó.
mathijsuitmegen 27:10

14

Tôi đã từng gặp vấn đề tương tự. Hóa ra là tôi đã có cả "MyPage.aspx" và "Bản sao của MyPage.aspx" trong dự án của mình.


3

Ngoài ra, hãy đảm bảo rằng bạn không có tệp nào vô tình cố gắng kế thừa hoặc xác định cùng một lớp (một phần) với các tệp khác. Lưu ý rằng các tệp này dường như không liên quan đến các tệp thực sự xuất hiện lỗi!


1

Tôi đã gặp phải lỗi tương tự, ngoại trừ đó là lỗi WPF. Tôi đang sắp xếp lại các dự án và có một quyền kiểm soát được xác định như sau:

<local:CustomControl Name="Custom" /> 

Trong mã của tôi đằng sau, tôi đã thử sử dụng Custom.Blah, nhưng tôi gặp lỗi:

The name 'Custom' does not exist in the current context

Thủ thuật đối với tôi là gì đã thay đổi quyền kiểm soát của tôi trong Xaml thành thế này:

<local:CustomControl x:Name="Custom" />

Hy vọng điều này sẽ giúp ai đó ngoài kia!


1

Tôi gặp lỗi tương tự sau khi thực hiện các thay đổi với ngữ cảnh dữ liệu của mình. Nhưng tôi gặp phải một cái gì đó mà tôi không quen. Tôi đã quen với việc xuất bản các tệp của mình theo cách thủ công. Thông thường khi tôi làm điều đó, không có thư mục App_Code nào xuất hiện trong thư mục xuất bản. Bu tôi bắt đầu sử dụng xuất bản VS 12, xuất bản trực tiếp với sự hỗ trợ của bạn lên máy chủ web. Và sau đó tôi gặp lỗi về ứng dụng được biên dịch trước. Sau đó, tôi xóa thư mục app_code nó đã hoạt động. Nhưng sau đó nó đã cho tôi lỗi Ngữ cảnh dữ liệu mà bạn đang gặp phải. Vì vậy, tôi chỉ cần xóa tất cả các tệp và chạy lại xuất bản mà không có giới hạn tệp (mọi thư mục và tệp sẽ được xuất bản) sau đó nó hoạt động như một sự quyến rũ.


1

Tôi gặp vấn đề tương tự, vấn đề của tôi là không có khoảng cách giữa hai thuộc tính "

AutoGenerateColumns="False"DataKeyNames="ProductID"

thay vì

AutoGenerateColumns="False" DataKeyNames="ProductID"

1

Tôi đã sửa lỗi này trong dự án của mình bằng cách sao lưu các tệp hiện tại (vì vậy tôi vẫn còn mã của mình), xóa aspx hiện tại (và các trang con), tạo một tệp mới và sao chép nội dung của tệp sao lưu vào tệp mới.



0

Tùy chọn giải pháp số 2 được cung cấp ở trên hoạt động cho các ứng dụng biểu mẫu windows chứ không phải ứng dụng web aspx. Tôi gặp lỗi tương tự trong ứng dụng web, tôi đã giải quyết vấn đề này bằng cách xóa tệp mà tôi có quyền kiểm soát người dùng có cùng tên, tệp aspx này thực sự là tệp sao lưu và không được tham chiếu ở bất kỳ đâu trong quá trình này, nhưng nó vẫn gây ra lỗi vì tên của quyền kiểm soát người dùng đã đăng ký trên tệp sao lưu được đặt tên giống hệt trên tệp aspx đã được tham chiếu trong luồng quy trình. Vì vậy, tôi đã xóa tập tin sao lưu và giải pháp xây dựng, xây dựng thành công.

Hy vọng điều này sẽ giúp một số người trong trường hợp tương tự.

Vijaya Laxmi.


0

Tôi đã gặp vấn đề tương tự vì tôi đang cố gắng tạo lại tệp aspx từ một dự án visual studio 2010 nên các điều khiển có thuộc tính clientidmode = "Static". Khi điều này được gỡ bỏ, nó đã được giải quyết.


0

Tôi đã gặp sự cố tương tự khi tinh chỉnh với Bộ lặp sau khi chuyển đổi nó từ DataList.

Vấn đề là tôi đã vô tình hợp nhất 2 thuộc tính khi xóa một thuộc tính không cần thiết.

<asp:Repeater runat="server" ID="ClientsRP"DataSourceID="ClientsDS">
    .
    .
    .
</asp:Repeater>

Và điều này đã ngăn cản việc tạo bộ lặp trong tệp thiết kế.


0

Tôi đã có cùng một thông báo lỗi. Mã của tôi không có lỗi và hoạt động hoàn hảo, sau đó tôi quyết định quay lại và đổi tên một trong các nút của mình và đột nhiên nó cho tôi một lỗi biên dịch kèm theo gạch dưới nguệch ngoạc màu xanh nói rằng điều khiển không tồn tại trong ngữ cảnh hiện tại ...

Hóa ra Visual Studio bị đơ vì sự cố liên quan đến các tệp sao lưu mà tôi đã tạo trong lớp aspx.cs của mình. Tôi đã xóa những thứ đó và lỗi đã biến mất.


0

Tôi đã gặp phải vấn đề tương tự. Rõ ràng, bạn không nên gọi một lớp trong BLL bằng tên giống như một trong các tệp .aspx / .aspx.cs. Tôi đã nghĩ rằng chúng sẽ không ở trong cùng một phạm vi, v.v. nhưng nó đã làm rối loạn hoạt động bên trong của Visual Studio quá nhiều. Tôi hơi ngạc nhiên là không có thứ gì ngăn bạn làm điều này nếu nó sẽ tạo ra loại lỗi đó. Dù sao, chỉ cần xóa các tệp .aspx / .aspx.cs và xây dựng lại dự án của bạn. Sau đó đưa chúng trở lại dưới một tên khác. Bạn có thể sao chép / dán mã của mình vào một trình soạn thảo khác nếu bạn không muốn nhập lại tất cả.


0

Trong trường hợp của tôi, khi tôi tạo biểu mẫu web, nó được đặt tên là WebForm1.aspx và các tên tương ứng (WebForm1). Thư, tôi đã đổi tên nó thành một thứ khác. Tôi đã đổi tên thủ công ở hầu hết tất cả các nơi, nhưng một nơi trong tệp thiết kế vẫn hiển thị nó là 'WebForm1'.

Tôi cũng đã thay đổi điều đó và loại bỏ lỗi này.


0

1) Kiểm tra thuộc tính CodeFile trong <% @ Page CodeFile = "filename.aspx.cs"%> trong trang "filename.aspx", Mã phía sau tên tệp và tên Thuộc tính này phải giống nhau.

2) bạn có thể bỏ lỡ runat = "máy chủ" trong mã


0

Trong trường hợp của tôi, tôi đã phải tìm qua 417 lỗi "không tìm thấy tên điều khiển" để tìm ra một lỗi thực sự: Tôi đã thay thế một DLL nhưng không cập nhật số phiên bản trong web.config. Đã sửa lỗi đó và xây dựng thành công, 3 phút sau tất cả các lỗi khác đã tự khắc phục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.