I have just created an ASP.NET C# project and a virtual directory for it in IIS in (as far as I know) the normal way, but I am seeing very strange behavior that I have never seen before.
It seems that none of my C# methods are ever being called. I know this because I have overridden a bunch of methods to do nothing but throw an exception. At least Default.aspx is viewable in the browser (see below)
Here is the exact content of my Default.aspx.cs file:
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");
}
}
}
I assume this code is not being loaded at all, because if it was then I would see an exception whenever I tried to view the page in the browser. Instead the content from the .aspx file appears normally (except that my event handlers are not called.)
It gets worse when I try to add new .aspx pages. I get this error when I try to view a new page in the browser (this is with the unmodified .cs file from the VS2008 template): Parser Error
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'.
What can cause an ASP.NET site to get into this strange state?
Note: <%...%>
escapes in the .aspx file still work fine. Also when I add form fields in the .aspx file, I can auto-complete their names in the .cs file. I have tried both true
and false
for AutoEventWireup
on both pages. I have also tried adding and removing "partial" from all class declarations.
Update - here are my @Page tags. As I said, I have tried toggling AutoEventWireup
. The referenced .cs
files exist and compile with no errors.
<%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Default.aspx.cs" Inherits="Drawings2._Default" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Drawings2.WebForm1" %>
Related:
Try changing :
<%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Default.aspx.cs" Inherits="Drawings2._Default" %>
to:
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="Drawings2._Default" %>
The CodeBehind
is for visual studio. I believe CodeFile
is used for the JIT.
The other alternative is to compile your project and update your assembly in the bin dir.
http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx
CodeBehind Specifies the name of the compiled file that contains the class associated with the page. This attribute is not used at run time.
This attribute is used for Web application projects. The CodeFile attribute is used for Web site projects. For more information about Web project types in Visual Studio, see Web Application Projects versus Web Site Projects.
CodeFile Specifies a path to the referenced code-behind file for the page. This attribute is used together with the Inherits attribute to associate a code-behind source file with a Web page. The attribute is valid only for compiled pages.
This attribute is used for Web site projects.
The CodeBehind attribute is used for Web application projects. For more information about Web project types in Visual Studio, see Web Application Projects versus Web Site Projects.
There's a lot of conflicting information here. For example, if you are truly creating an ASP.NET Web Application (as opposed to a web site), then you should not be using CodeFile
, as used2could suggests.
Have you tried checking the Build Action of your code-behind files? Make sure it is set to Compile.
I think we need to start you from scratch, to identify if the problem is coming from your web project, your IIS configuration, or both.
I'm going to make the following assumptions about your set up, because this is my current set up. Let me know if any of these are wrong, but it shouldn't make a huge difference:
Let's try to keep this as simple as possible, to minimize any chance of weirdness:
Contents of 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>
Contents of 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's Page_Load method.";
}
}
}
Contents of 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>
Contents of 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's Page_Load method.";
}
}
}
Now, this site should work without fail when debugging in your local computer:
After following the above steps, are you still getting problems?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With