【问题标题】:Can two ASPX pages inherit the same code behind class?两个 ASPX 页面可以在类后面继承相同的代码吗?
【发布时间】:2016-09-29 05:43:32
【问题描述】:

我刚开始学习 ASP.NET。据我了解,ASP.NET 与老式 ASP 的不同之处在于,页面的逻辑代码作为单独的文件存在,而不是嵌入在 ASP 页面中。因此,当用户请求像 ShoppingCart.aspx 这样的页面时,服务器会读取顶部的指令...

<%@ Page Title="" Language="C#" MasterPageFile="~/Styles/Site.Master" AutoEventWireup="true" CodeBehind="MyShoppingCart.aspx.cs" Inherits="TailspinSpyWorks.MyShoppingCart" %>

这告诉服务器哪个文件和文件中的哪个类与页面相关联。后台代码类也有成员变量对应页面上的每个控件,并为后台代码文件中的代码操作控件提供了一种途径。

首先,我理解正确吗?

其次,是否可以使用两个具有相同名称控件的独立 ASPX 页面来设置站点,这两个页面都有一个指向相同文件和类的指令?你甚至想这样做吗?两个页面可以具有相同的功能,但布局不同。我在想这可能是一种创建单独的“桌面”和“移动”页面版本的方法,而不会在文件背后的代码中复制内容。

我想最终我想知道的是,是否有办法定义一个抽象页面?假设创建一个抽象页面定义,说明页面必须具有控件“cart_list”、“total_lbl”,但随后能够有多个从该抽象页面继承的页面?

【问题讨论】:

    标签: c# .net asp.net code-behind


    【解决方案1】:

    是的,两个页面可以继承自同一个类。就像它可以直接从 Page 类继承,甚至没有关联的 .cs 文件(当您的页面不是静态的但不处理事件或可能需要代码隐藏类的东西时很有用)。

    在实践中,我认为直接从同一个类继承多个 ASP.NET 页面并不是一个好主意。这并不常见,所以:

    • 代码将更难理解且无法扩展,
    • 在 Visual Studio 中将难以管理,尤其是在事件、控件等方面。
    • 对现有/缺少的控件会造成很大的痛苦。详见Guffa answer below

    如果您网站的多个页面共享相同的逻辑,

    • 每页创建一个类,并从一个公共父类继承这些类,该父类将包含公共方法和属性,并将继承自Page 类。您将获得一个广泛且易于理解的解决方案。
    • 如果案例适合创建母版页,则创建母版页。

    【讨论】:

    • +1 for '每页创建一个类,并从一个公共父类继承这些类,该父类将包含公共方法和属性,并将继承自 Page 类。您将获得一个广泛且易于理解的解决方案。'
    【解决方案2】:

    我刚开始学习 ASP.NET。据我了解,ASP.NET 与老式 ASP 的不同之处在于,页面的逻辑代码作为单独的文件存在,而不是嵌入到 ASP 页面中

    经典 ASP 和 ASP.NET 在很多方面都不同,主要的区别在于经典 ASP 页面(大部分)是基于程序的、基于脚本的、非托管代码,而 ASP.NET 页面是编译、托管、和事件驱动。通常 ASP.NET 页面将标记和服务器端代码分成两个单独的文件,但这不是必需的。很可能将服务器端代码放在 .aspx 页面中的

    顶部的指令...

    告诉服务器哪个文件和文件中的哪个类与页面相关联。代码隐藏类也有成员变量对应页面上的每个控件,并为代码隐藏文件中的代码提供了一种操作控件的方法。首先,我理解正确吗?

    是的,你理解正确。

    第二,一个站点是否可以设置有两个独立的 ASPX 页面,这些页面具有相同名称的控件,它们都有一个指向相同文件和类的指令?

    是的,你可以这样做。

    你愿意这样做吗?

    可能不会。事实上,即使有两个独立的 ASPX 页面都继承自同一个基本页面,也没有什么会迫使它们拥有相同的控件集。事实上,它们可以有不同的控件,并且页面将无错误地呈现。 (如果您尝试访问其中一个页面中不存在的代码隐藏控件,您将收到运行时错误。)

    我想最终我想知道的是,是否有办法定义一个抽象页面?假设创建一个抽象页面定义,说明页面必须具有控件“cart_list”、“total_lbl”,但随后能够有多个从该抽象页面继承的页面?

    (据我所知)没有办法做到这一点。不过,可能会接近的是拥有一个基本的 Page 类,即使您手头没有这个特定的场景,这是一个很好的使用实践。有关创建和使用基本 Page 类的更多信息,请参阅:Using a Custom Base Class for your ASP.NET Pages' Code-Behind Classes

    编程愉快!

    【讨论】:

      【解决方案3】:

      如果您使用的是 .NET 4.0,您可能需要检查 this。它描述了Request.Browser.IsMobileDeviceRequest.Browser.MobileDeviceModel

      您可以将一些逻辑放入代码隐藏或 ASPX 标记中,以检测您是否在移动设备上运行。这将允许您将所有代码放在一个文件中,但可以选择要显示的 HTML 元素等。

      【讨论】:

      • +1。不知道移动设备检测现在可以在 .NET Framework 本身中使用。
      【解决方案4】:

      是的,也不是。

      不同的页面可以使用同一个类,但是页面控件与类中变量的绑定并不严格。

      如果变量存在并且具有匹配类型,则控件引用将简单地分配给变量,但您不能对页面必须包含某些控件进行任何限制。但是,您可以在代码中首先检查变量是否已分配,或者它们是否包含空引用。

      我偶尔会为不同的页面使用相同的类,但这并不常见。通常这样做没有什么好处,如果你想在页面中重用代码,你可以把它放在一个类文件中,然后从单独的页面中使用它。

      【讨论】:

        猜你喜欢
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        相关资源
        最近更新 更多