在.aspx页面中声明其他类

时间:2013-03-13 13:17:51

标签: c# asp.net class

我很难让这段代码正常工作

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

namespace Admin.Web.Booking
{
    public partial class Book
    {
        public partial class obj : Admin.Base.AdminBase
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("test");
            }
        }
    }
}

页面声明看起来像

<%@ Page Title="" Language="C#" MasterPageFile="~/Master/Admin1.Master" AutoEventWireup="false" CodeBehind="obj.aspx.cs" Inherits="Admin.Web.Booking.Book.obj" %>

Designer文件看起来像

namespace Admin.Web.Booking
{

    public partial class Book
    {

        public partial class obj
        {
        }
    }

}

我收到错误:分析器错误消息:无法加载类型'Admin.Web.Booking.Book.obj'。

不明白如何让obj类成为Admin.Web.Booking命名空间中Book类的一部分。 Admin.Base.AdminBase扩展了System.UI.Page。

1 个答案:

答案 0 :(得分:0)

我建议的第一件事是让课程obj继承自Page

namespace Admin.Web.Booking
{
    public partial class Book
    {    
        public partial class obj : System.Web.UI.Page
        {
        }
    }
}

看看会发生什么。

如果这不起作用,那么我认为你不应该以这种方式使用嵌套类。我可以很容易地看到这种维护变得过于复杂,特别是当更多页面被添加到项目中时。

如果您想构建代码,那么我会在您的项目中使用文件夹:

  • 文件夹:预订
  • 文件夹:订单
  • 文件夹:门票

基本上将您的网站分成不同的域/边界。然后将ASPX页面放入这些文件夹,例如

namespace Booking {
    public partial class Booking : Page {}
}

namespace Orders {
    public partial class Orders : Page {}
}

不要使用嵌套类拆分代码,我真的可以看到这对你来说是一种痛苦的经历。

根据下面的评论确定,我的偏好是多个名称空间,而不是嵌套类。

命名空间在逻辑上将代码分成相关区域,例如管理员,预订,门票等。如果将代码放置在单独的命名空间中,则可以更轻松地导航代码,这可以在解决方案资源管理器中轻松查看。将所有代码放在几个类文件中将导致代码更难以遵循,并且随着时间的推移会降低生产率,增加耦合并且会变得粘滞。