Подтвердить что ты не робот

Ни один из моего кода "code behind" не вызывается

Я только что создал проект ASP.NET С# и виртуальный каталог для него в IIS в (насколько мне известно) обычным способом, но я вижу очень странное поведение, которого я никогда раньше не видел.

Кажется, что none моих методов С# вызывается. Я знаю это, потому что я переопределил кучу методов, чтобы ничего не делать, кроме исключения. По крайней мере, Default.aspx можно просмотреть в браузере (см. Ниже)

Вот точный контент моего файла Default.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Drawings2
{
    public partial class _Default : System.Web.UI.Page
    {
        static _Default()
        {
            throw new Exception("XXX");
        }
        public _Default()
        {
            throw new Exception("XXX");
        }
        override protected void OnInit(EventArgs e)
        {
            /*
             * base.OnInit(e);
             * InitializeComponent();
             */
            throw new Exception("XXX");
        }
        private void InitializeComponent()
        {
            /*
             * Load += new EventHandler(this.Page_Load);
             */
            throw new Exception("XXX");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            throw new Exception("XXX");
        }
    }

}

Я предполагаю, что этот код вообще не загружается, потому что если бы это было тогда, я бы увидел исключение всякий раз, когда пытался просмотреть страницу в браузере. Вместо этого содержимое из файла .aspx появляется нормально (за исключением того, что мои обработчики событий не вызываются.)

Ухудшается, когда я пытаюсь добавить новые страницы .aspx. Я получаю эту ошибку, когда пытаюсь просмотреть новую страницу в браузере (это с немодифицированным файлом .cs из шаблона VS2008): Ошибка Parser

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Could not load type 'Drawings2.WebForm1'.

Что может привести к тому, что сайт ASP.NET попадет в это странное состояние?

Примечание: <%...%> экраны в файле .aspx все еще работают нормально. Кроме того, когда я добавляю поля формы в файл .aspx, я могу автоматически заполнить их имена в файле .cs. Я попробовал как true, так и false для AutoEventWireup на обеих страницах. Я также пытался добавить и удалить "частичный" из всех объявлений классов.


Обновить - вот теги @Page. Как я уже сказал, я попытался переключиться на AutoEventWireup. Имеющиеся ссылки файлы .cs существуют и компилируются без ошибок.

<%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Default.aspx.cs" Inherits="Drawings2._Default" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Drawings2.WebForm1" %>

по теме:

4b9b3361

Ответ 1

Здесь много противоречивой информации. Например, если вы действительно создаете веб-приложение ASP.NET (в отличие от веб-сайта ), то вы не должны использовать CodeFile, поскольку used2could предлагает.

Пробовали ли вы проверять Build Action ваши файлы с кодом? Убедитесь, что установлено значение Компилировать.

Я думаю, нам нужно начинать с нуля, чтобы определить, возникает ли проблема из вашего веб-проекта, конфигурации IIS или того и другого.

Я собираюсь сделать следующие предположения о вашей настройке, потому что это моя текущая настройка. Дайте мне знать, если они ошибаются, но это не должно иметь большого значения:

  • Вы используете Visual Studio 2010 с .NET 3.5
  • Ваш веб-сервер - Windows 2003
  • На вашем веб-сервере работает IIS 6.0

Создание нового проекта веб-приложения:

Постарайтесь максимально упростить это, чтобы свести к минимуму вероятность странности:

  • Решение 'TestWebApp1'
    • Проект 'TestWebApp1' (веб-приложение ASP.NET)
      • Свойства
      • Ссылки
      • App_Data​​li >
      • Сценарии
      • Default.aspx(Build Action: Контент)
        • Default.aspx.cs(Build Action: Скомпилировать)
      • SiteLayout.Master(Build Action: Контент)
        • SiteLayout.Master.cs(Build Action: Скомпилировать)
      • Web.config

Содержимое Default.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/SiteLayout.Master"
    AutoEventWireup="true" CodeBehind="Default.aspx.cs"
    Inherits="TestWebApp1.Default" %>
<asp:Content ID="Content2" ContentPlaceHolderID="mainCPH" runat="server">
    <p><asp:Label ID="lblTest" runat="server">This is a test</asp:Label></p>
</asp:Content>

Содержимое Default.aspx.cs:

using System;
namespace TestWebApp1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblTest.Text = "Modified from Default.aspx Page_Load method.";
        }
    }
}

Содержимое SiteLayout.Master:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="SiteLayout.master.cs"
    Inherits="TestWebApp1.SiteLayout" %>
<!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 id="form1" runat="server">
            <div>
                <p><asp:Label ID="lblTest" runat="server">This is a test</asp:Label></p>
                <asp:ContentPlaceHolder ID="mainCPH" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </form>
    </body>
</html>

Содержимое SiteLayout.Master.cs:

using System;
namespace TestWebApp1
{
    public partial class SiteLayout : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblTest.Text = "Modified from master page Page_Load method.";
        }
    }
}

Теперь этот сайт должен работать без сбоев при отладке на вашем локальном компьютере:

site working locally

Развертывание в IIS

  • Щелкните правой кнопкой мыши проект TestWebApp1 и нажмите "Опубликовать".
  • Для простоты выберите "Файловая система" как "Метод публикации".
  • Введите путь, в котором будут развернуты файлы.
  • На вашем веб-сервере откройте IIS (я предполагаю, что вы используете IIS 6.0)
  • В разделе Веб-сайт по умолчанию (или на любом другом сайте) создайте новый Виртуальный каталог. Убедитесь, что у него есть разрешения на запуск скриптов.
  • Скопируйте файлы, опубликованные с вашего компьютера-разработчика, в виртуальный каталог IIS.
  • Что это - ваш сайт должен работать нормально.

Basic VS 2010 Publish DialogVirtual directory Access Permissions

После выполнения вышеуказанных шагов все еще возникают проблемы?

Ответ 2

Попробуйте изменить:

<%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Default.aspx.cs" Inherits="Drawings2._Default" %>

в

<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="Drawings2._Default" %>

CodeBehind предназначен для визуальной студии. Я считаю, что CodeFile используется для JIT.

Другой альтернативой является компиляция вашего проекта и обновление сборки в каталоге bin.

http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

CodeBehind Указывает имя скомпилированный файл, содержащий класс, связанный со страницей. Эта атрибут не используется во время выполнения.

Этот атрибут используется для Web прикладных проектов. CodeFile атрибут используется для веб-сайта проекты. Для получения дополнительной информации о Типы веб-проектов в Visual Studio, см. Проекты веб-приложений по сравнению с Проекты веб-сайта.

CodeFile Указывает путь к ссылочному файлу с кодом для стр. Этот атрибут используется вместе с атрибутом Inherits связать исходный файл с кодом с веб-страницей. Атрибут действителен только для скомпилированных страниц.

Этот атрибут используется для веб-сайта проекты.

Атрибут CodeBehind используется для Проекты веб-приложений. Для большего информация о типах веб-проектов в Visual Studio, см. Веб-приложение Проекты и проекты веб-сайтов.

Ответ 3

Я усвоил этот трудный путь, и это может быть ваша проблема.

Убедитесь, что папка bin находится в root веб-сайта в IIS.

У меня был www.mysite.com/myapp/bin, и это не сработало, мне нужно было иметь dll в www.mysite.com/bin, даже если мои страницы были внутри www.mysite.com/myapp (В моем случае у меня был Wordpress, запущенный в корне с PHP и ASP.NET в подпапке для определенных страниц)

(Что еще хуже для отслеживания для меня, так это то, что в корне уже существовала папка bin из предыдущего развертывания, и я обновлял сайт и задавался вопросом, почему мои изменения кода не вступили в силу)

EDIT: Выяснили, как избежать размещения папки bin в корне сайта. В IIS, если вы щелкните правой кнопкой мыши на своей папке приложения на веб-сайте, есть опция "Преобразовать в приложение" (по крайней мере, в IIS 7.5 не уверены в более старых версиях). После этого эта папка сможет использовать ее собственный bin и web.config

EDIT2: Инструкции для IIS 6 и 7: http://www.banmanpro.com/support2/appstartpoint.asp

Ответ 4

Я подозреваю, что объявление вашей страницы (<%@ Page ... %>) в файле apsx неверно. Посмотрите на атрибуты ClassName и CodeBehind и убедитесь, что они соответствуют вашему .cs файлу.

Ответ 5

Я думаю, что IIS считает ваш проект "сайтом ASP.NET", тогда как вы и/или ваш VS.NET можете подумать, что у вас действительно есть "веб-приложение ASP.NET". Нажав конвертировать в веб-приложение в проекте в VS.NET и убедиться, что вы правильно настроили (см. Другие комментарии) виртуальный каталог в проекте в IIS, все должно работать нормально.

Читая ваши сообщения и комментарии, я вижу противоречивые комментарии (если я не ошибаюсь)

Вы говорите:

  • "Работа с" ASP.NET Web Application "(по сравнению с ASP.NET Сайт) ".
  • "Надеюсь, это не только решение, потому что я не могу для этого (клиент требует, чтобы мой приложение находится в подкаталоге - они не разрешит какой-либо из моего кода в ~ или ~/Бен.) "

"ASP.NET Web Application" требует скомпилированных dll при развертывании, а не в базовых файлах .cs.

Является ли корень причиной концептуальной путаницы между тем, что вы хотите использовать в качестве разработчика, и тем, что вам разрешено развернуть клиентом?

Ответ 6

Я получаю ошибку времени выполнения на полу-регулярной основе; очистка:

C:\Documents and Settings\\Локальные настройки\Данные приложения \Microsoft\WebsiteCache C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Временные файлы ASP.NET

(очевидно, замените его), и запуск iisreset обычно выполняет эту работу для меня. Кроме того, попробуйте "очистить" решение до восстановления; иногда кажется, что имеет значение.

Если у вас по-прежнему возникают те же проблемы, попробуйте отбросить и воссоздать ссылку на DLL.

Ничего слишком предписывающего, я боюсь, но, надеюсь, получим работу!

Ответ 7

Это кажется проблемой пространства имен, поскольку динамически скомпилированные классы сталкиваются с предварительно скомпилированными классами. Я предлагаю сделать следующее:

1) Выберите подходящее пространство имен для вашего приложения. "Рисование" прекрасно, но я предлагаю нечто более контекстуальное, например CompanyName.ProjectName.AppName

2) Задайте это пространство имен по умолчанию для проекта (Свойства проектa > вкладка "Приложение" )

3) Измените пространство имен в каждом файле кода (.cs) и его соответствующую ссылку в файлах script (.aspx, *.ascx)

4) Убедитесь, что не существует повторяющихся классов (это должно быть отмечено компилятором)

5) Очистите все файлы из временной папки ASP.NET

6) Перекомпилируйте проект

Ответ 8

Я думаю, что раньше я мог встретить нечто подобное. Оказалось, что это связано с тем, что у меня был файл default.aspx и default.master, который автоматически компилируется в имя класса _default, поэтому получение типа существует в двух ошибках dll.

Ответ 9

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

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Drawings2.WebForm1" %>