ASP 2.0和部分类

时间:2009-12-09 21:34:39

标签: c# asp.net asp.net-2.0

我们的一个承包商给了我们一个ASP.NET 2.0网站,我在将它集成到我们的流程中时遇到了一些麻烦。他把项目作为压缩目录,没有解决方案文件或任何东西给了我们。我可以使用Open - >在Visual Studio中打开它。网站选项,网站运行。但是,我想将它设置为一个Web应用程序项目,这样我就可以将项目引用添加到我们的共享库中,而不是将它们链接到'bin'目录中,这只是因为我更喜欢真正的常规项目。

我遇到了一个奇怪的问题。让我提取一些代码:

HeaderControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeaderControl.ascx.cs" Inherits="Controls_WebUserControl" %>

HeaderControl.ascx.cs

public partial class Controls_WebUserControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)

好的,这有点奇怪,但至少似乎是合法的。基类在代码隐藏(代码文件?)中有一个部分定义。但是,许多其他控件以相同的方式定义,例如

SomeControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SomeControl.ascx.cs" Inherits="Controls_WebUserControl" %>

SomeControl.ascx.cs

public partial class Controls_WebUserControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)

预计,当我尝试构建我已将文件传输到的新Web应用程序项目时,我会收到一些关于在几个地方定义的相同方法的错误。我不明白为什么它没有设置一个代码来定义控件类的部分定义和覆盖基类的方法,但这就是重点。

真正让我感到满意的是:原作是如何运作的?它运行并且工作正常,因此编译器必须做一些我不理解的事情。 Controls_WebUserControl类会发生什么?

3 个答案:

答案 0 :(得分:2)

当您从网站更改为Web应用程序时,需要右键单击该项目并选择“转换为Web应用程序”。这应该更新所有页面。

这是一个旧的链接,但我认为它仍然相关:

http://webproject.scottgu.com/CSharp/migration2/migration2.aspx

答案 1 :(得分:1)

实际上您需要将CodeFile="SomeControl.ascx.cs"替换为CodeBehind="SomeControl.ascx.cs"

CodeBehind vs CodeFile

答案 2 :(得分:1)

我会说,虽然提供的网站有效但是不正确。

它的工作原理是因为它是一个Web站点项目(而不是Web应用程序项目)。网站项目没有网页的命名空间;相反,它分别编译每个页面。换句话说,您可以说忽略页面的类名。

将它带入Web应用程序项目时会失败,因为它会尝试构建命名空间,但由于网页和控件中的公共类名称而失败。

我右键单击,选择转换为Web应用程序,然后在页面上修复类名称&amp;控制。那会让你到达你想去的地方。