我可以在没有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之前在类中设置变量,因此如果在不使用构造函数的情况下存在变通方法,那也可以。
答案 0 :(得分: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
的覆盖,并在调用{{1}之前放置代码}。
如果您在代码中覆盖了base.OnPreInit(e)
,则可以在.aspx中声明OnPreInit
,这取决于您在逻辑代码之前或之后调用Page_PreInit
的位置。
换句话说:你可以完全控制它何时发生。