我是一个非常初学者,所以我的问题可能看起来很荒谬..但是,我想知道文件 .aspx.designer.cs 是如何运作的.. 这是我第一次使用包含每个页面的文件 .aspx.designer.cs 的解决方案。所以我理解它是.aspx中用于代码隐藏的控件声明。
以下是我的问题:
为什么有时解决方案没有.aspx.designer.cs文件? (文件是隐藏的还是不存在?)
我经常遇到这些文件的问题,当我在.aspx代码中添加一些时,它们不会自动重新创建控件的声明,我做错了什么?
答案 0 :(得分:29)
.aspx.designer.xx
文件是ASP.NET webforms代码隐藏文件和.aspx标记文件的桥梁。此处表示aspx标记页面上存在的任何服务器控件。最重要的是服务器控件的名称和类型。
这部分允许Visual Studio在设计时创建的服务器控件的代码隐藏页面中为用户提供IntelliSense。
它们的工作原理:当您从设计器添加/删除服务器控件时,Visual Studio将生成或保持同步.designer文件中的protected
成员。
protected global::System.Web.UI.WebControls.DropDownList DropDownList1;
请注意.designer文件会创建partial class
。这提供了与代码隐藏文件的链接。这就是Intellisense如何获得.aspx和代码隐藏之间的钩子。
您可以重新生成设计器文件:http://www.undermyhat.org/blog/2009/07/tip-regenerate-aspx-designer-cs-files-when-corrupted/
答案 1 :(得分:18)
Visual Studio有两种创建网站的方法:网站项目和Web应用程序项目。 (好的,好的,如果你添加MVC就有三个)。
只有Web应用程序项目具有designer.cs文件。 网站项目没有它们。
Web应用程序项目类型已添加到Visual Studio 2003中。
答案 2 :(得分:2)
正如p.campbell指出的那样,.designer.cs文件将.aspx文件链接到其.aspx.cs CodeBehind文件。如果没有.designer.cs文件,.aspx.cs CodeBehind文件中的每个.aspx页面控件都将返回错误,"在当前上下文中不存在"。 .designer.cs中的链接是基于"继承" asp文件中@ Page指令的属性以及.aspx.cs CodeBehind文件的名称空间和类。 "继承"的最后一部分属性必须与CodeBehind文件和.designer.cs文件中定义的类匹配,并且前面的段必须与.designer.cs和CodeBehind文件的名称空间匹配。
实施例: myfile.aspx
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="myfile.aspx.cs"
Inherits="my.namespace.dot.classname" %>
myfile.aspx.cs
namespace my.namespace.dot {
public partial class classname : Page { ... }
}
注意:CodeBehind文件类必须继承自Page类或其衍生物。
myfile.designer.aspx.cs
namespace my.namespace.dot {
public partial class classname { ... }
}
注意:.designer.cs类并不关心继承,只是类名与CodeBehind和.aspx文件匹配。
您可以重新生成丢失的.designer文件(w3cgeek.com&#34; Regenerate designer.cs&#34;):
Visual Studio应自动填充.designer.cs文件,其中包含链接.aspx和CodeBehind文件所需的所有代码。 &#34;在当前上下文中不存在&#34;错误现在应该消失了!
编辑:我添加了.designer.cs说明,因为链接已经死了,最初是由p.campbell发布的。