Я создал New Web Site
в Visual Studio 2008
, добавил страницу с элементом управления над ним:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form runat="server">
<div>
<asp:Label runat="server" ID="lblFoobar">Foobar</asp:Label>
</div>
</form>
</body>
</html>
и сгенерированный класс с кодом-кодом получил новое поле lblFoobar
.
Я могу получить доступ к нему в любой член как локальную переменную экземпляра. Все работает нормально.
Но когда я создал New ASP.NET Application
, тот же подход вызывает ошибку:
The name 'lblFoobar' does not exist in the current context
Почему?
На вашей странице .aspx должно быть два файла. Один файл должен быть .aspx.designer.cs, а другой должен быть файлом codebehind, файл .aspx.cs.
Если вы щелкните правой кнопкой мыши файл aspx в проводнике решений и выберите "Просмотр файла Codegen", он должен открыть файл .aspx.designer.cs для вас. Ярлык должен быть объявлен там.
Если нет, тогда дизайнер еще раз не разобрал вашу разметку. Откройте файл .aspx в представлении дизайна, сделайте небольшое изменение, верните его и удалите, чтобы запустить конструктор снова.
Убедитесь, что вы не просто скопировали всю страницу со своего веб-сайта в свое веб-приложение, но создали новую страницу.
Убедитесь, что ваша .aspx-страница имеет правильную директиву @page, что-то близкое к:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
Ну, в вашем примере кода отсутствует самая важная вещь для страницы ASP.NET, которая является директивой @Page, которая сообщает механизму ASP.NET, какой класс должен создавать экземпляр для страницы, и если ему нужно динамически компилировать любую код.