2012-06-07 3 views
2

Могу ли я реализовать конструктор на странице ASPX без файла Codebehind?Использовать конструктор на странице ASPX (No Codebehind)

У меня есть страница "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, поэтому, если обходной путь существует без использования конструкторов, это тоже сработает.

+0

Любые причины не просто использовать код позади? Зачем вам нужно задавать значения до preinit? Установка значений в init - это, вероятно, самое раннее поддерживаемое событие жизненного цикла, которое вы можете использовать. –

+0

@Kyle Trauberman: Я хочу сделать небольшое тестирование, и я не хочу, чтобы каждый раз, когда я хочу изменить код, я должен запускать/останавливать свой отладчик. – palswim

+1

Звучит как плохая причина для этого. AFAIK, вы не можете делать то, что хотите. –

ответ

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 в коде позади, как обработчик событий страницы, вы можете использовать переопределение OnPreInit в вашем .aspx и поставить код перед вызовом base.OnPreInit(e).

Если вы перекрывая OnPreInit в коде позади, вы можете объявить в вашем .aspx в Page_PreInit, и это зависит от того, где вы звоните base.OnPreInit(e) перед кодом за логикой или после.

Другими словами: у вас есть полный контроль над тем, когда это произойдет.

+0

Спасибо! Я определенно могу установить данные до PreInit. – palswim

Смежные вопросы