asp.net - 在 ASPX 页面中使用构造函数(无代码隐藏)

标签 asp.net .net constructor code-behind

我可以在没有代码隐藏文件的 ASPX 页面中实现构造函数吗?

我有一个页面“test.aspx”,我尝试包含一个构造函数:

<%@ Page Language="C#" %>
<script runat="server">
    public dd_prop_test_aspx() : base() { /* Do stuff */ }
</script>

但是,运行时编译器给了我一个错误:

CS0111: Type 'ASP.test_aspx' already defines a member called 'test_aspx' with the same parameter types

Line 558:        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
Line 559:        public test_aspx() {
Line 560:            string[] dependencies;

我可以指定一个指令来不自动生成构造函数(编译器似乎会生成构造函数)吗?或者,我有其他方法来解决这个问题吗?

最后,我想在 Page_PreInit 之前在类中设置变量,因此如果存在不使用构造函数的解决方法,那也是可行的。

最佳答案

尽管您无法重新声明构造函数,但您可以自由地重写 <script runat="server"> 中的任何方法。标记,只要您不在旁边的代码中覆盖它即可。而且,您还可以添加页面事件处理程序(适用相同的限制),例如 Page_PreInit .

由于您可以同时使用页面事件和覆盖,因此您可以提前注入(inject)代码:

<script runat="server">
    void Page_PreInit(object sender, EventArgs e) 
    {
        Response.Write("First?");
    }

    protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e); // implicitly calls Page_PreInit
        Response.Write("Second!");
    }
</script>

因此,如果您使用 Page_PreInit在后面的代码中作为页面事件处理程序,您可以使用 OnPreInit 的覆盖在您的 .aspx 中并将代码放在对 base.OnPreInit(e) 的调用之前。

如果您要覆盖 OnPreInit在后面的代码中,您可以声明 Page_PreInit在您的 .aspx 中,这取决于您在哪里调用 base.OnPreInit(e)在逻辑后面的代码之前或之后。

换句话说:您可以完全控制它何时发生。

关于asp.net - 在 ASPX 页面中使用构造函数(无代码隐藏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941439/

相关文章:

c# - 如何使用 C# 执行 PowerShell 脚本

c# - 无法将 C# 代码移植到实现 IDataErrorInfo 的托管 C++

asp.net - 监控 ASP.NET 应用程序内存和磁盘使用情况

c++ - 如何使用在子构造函数中创建的对象构造父类

java - 将 RealmObject 扩展为单例的类

c++ - 编译器向空类声明添加了什么?

c# - 检查 SELECT 语句条件是否为真

python - 尝试抓取蜘蛛时出现错误(NotImplementedError)

asp.net - FireFox 中的默认表单按钮

asp.net - Web 服务中的 ThreadPool.QueueUserWorkItem 用于 “Fire and Forget” 任务