【问题标题】:ASP.NET "@ Master" directive: difference between "ClassName" and "Inherits" attributesASP.NET“@Master”指令:“ClassName”和“Inherits”属性之间的区别
【发布时间】:2013-12-23 01:14:44
【问题描述】:

根据我的阅读,@ Master 指令上的ClassNameInherits 属性似乎做了几乎相同的事情。我已经阅读了this page on MSDN 和许多其他来源,但我仍然感到困惑。 This forum page 似乎表明Inherits 属性指定将在运行时表示母版页的类的名称。 MSDN 页面,更含糊地说,似乎在说同样的事情。那么,这也将是代码隐藏文件中指定的部分类的名称。

阅读 MSDN 上的ClassName 属性,似乎意思相同。我在我的代码中尝试了许多实验,但仍然无法正常工作。

这两个属性到底有什么作用,它们之间有什么区别?

最终,我希望完成的是允许我的 .aspx 页面访问母版页的代码隐藏文件中的公共方法,如几篇帖子 including this one 中所述。

【问题讨论】:

  • 假设您了解什么是 Inherits 然后将 ClassName 视为孙子。它是从您的 ASPX 代码生成的类的名称。给定您的页面,那么 Inherits 是他的父母,ClassName 是他的儿子。
  • 好的,如果我理解正确的话,Inherits 实际上指定了代表母版页的类的超类?这就是这个词对我的直觉意义。那么 asp.net 母版页通常会为其 Inherits 属性指定 System.Web.UI.MasterPage?
  • 看看this,IMO 这很容易解释。无论如何,是的,大多数时候(但不是总是,当然)你会使用 MasterPage(或者你会省略)。

标签: asp.net master-pages


【解决方案1】:

ClassName 用于给页面命名,当我们使用内联代码时[意味着所有 HTML 和服务器端代码都包含在单个页面中]。因此,当我们在仅使用脚本块的 aspx 页面中拥有服务器端代码时,应使用此属性,例如:

<script runat="server">
    void Page_Load(object sender, EventArgs e)
    {
           welcomeLabel.Text = "Hi There";
     }
</script>

这可用于页面或用户控件。

At run time, a single-file page is treated as a class that derives from the Page class. AND THIS CLASS SHOULD HAVE A NAME

由于没有单独的 C# 代码文件 [也称为代码隐藏文件],因此没有明确定义的类。为了给页面的类命名,使用了ClassName 属性。

继承属性::

如果我们将页面的服务器端代码放在 .cs 文件中,那么只有我们应该使用 Inherits 属性。

当一个 web 表单被编译时,它的页面被解析并且一个新的类被生成和编译。这个新类派生自 inherits 关键字中标识的类。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LINQ2Entities.aspx.cs"
         Inherits="LINQ2Entities" %>

【讨论】:

  • 感谢您周到的回答。讨论“继承”时,您说“......生成了一个新类......从在 inherits 关键字中标识的类派生。”因此,.ASPX 页面成为一个类,它是“继承”中标识的类的子类。 that 类是如何生成的(在您的示例中为“LINQ2Entities”)?
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 2016-04-08
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多