2

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

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

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

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

CS0111:类型“ASP.test_aspx”已经定义了一个名为“test_aspx”的成员,具有相同的参数类型

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

我可以指定一个指令不自动生成构造函数(因为编译器似乎这样做)?或者,我有另一种解决方法吗?

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

4

1 回答 1

2

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

由于您可以同时使用页面事件覆盖,您可以提前注入代码:

<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在后面的代码中用作页面事件处理程序,则可以在 .aspx 中使用覆盖,OnPreInit并将代码放在对 .aspx 的调用之前base.OnPreInit(e)

如果您在OnPreInit后面的代码中重写,您可以Page_PreInit在您的 .aspx 中声明 a ,这取决于base.OnPreInit(e)您在逻辑代码之前或之后调用的位置。

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

于 2012-06-20T22:47:34.240 回答