Отсутствие полей кода для серверных элементов управления в дизайне ASP.NET в веб-приложении - PullRequest
2 голосов
/ 12 января 2010

Я создал 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>

и сгенерированный класс code-behind получил новое поле lblFoobar.

Я могу получить доступ к любому члену как к локальной переменной экземпляра. Все отлично работает.

Но когда я создал New ASP.NET Application, тот же подход выдает ошибку:

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

Почему?

Ответы [ 3 ]

4 голосов
/ 12 января 2010

На странице .aspx должно быть два файла. Один должен быть файлом .aspx.designer.cs, а другой должен быть файлом codebehind, файлом .aspx.cs.

Если щелкнуть правой кнопкой мыши файл aspx в обозревателе решений и выбрать «Просмотр файла Codegen», он должен открыть файл .aspx.designer.cs. Метка должна быть там объявлена.

Если нет, то дизайнер еще не правильно проанализировал вашу разметку. Откройте файл .aspx в режиме конструктора, внесите небольшое изменение, отмените его и удалите, чтобы снова запустить дизайнер.

1 голос
/ 12 января 2010

Убедитесь, что вы не просто скопировали всю страницу со своего веб-сайта в веб-приложение, но создали новую страницу.

Убедитесь, что на вашей странице .aspx есть правильная директива @page, близкая к:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
1 голос
/ 12 января 2010

В вашем примере кода отсутствует самая важная вещь для страницы ASP.NET, которая является директивой @Page, которая сообщает ядру ASP.NET, какой класс создать для этой страницы, и нужно ли ему динамически компилировать какие-либо код.

...