如何指定在" PageLoad"上运行的代码?在一个旧的ASP.NET站点?

时间:2017-03-02 21:45:24

标签: asp.net vb.net pageload page-lifecycle

我正在维护一个代码如下的旧网站:

<%
Unit = Request.QueryString.Item("Unit")
MemberNo = Request.QueryString.Item("MemberNo")
CustNo = Request.QueryString.Item("CustNo")
If Request.Form.Item("Action") = "Save" Then
. . .
%>

我需要在页面加载时运行一些代码。有没有可用的东西:

If Request.Form.Item("Action") = "Load" Then

- 或:

If Request.Form.Item("Action") = "Init" Then

......或者我该怎么做?

更新

我应该把你展示的代码放在哪里?该文件有这样的部分:

<script language="VB" runat="Server">
Dim adoRS As ADODB.Recordset
. . .
</script>

......和另一个这样:

<%
adoCon = New ADODB.Connection
adoCon.CommandTimeout = 900
adoCon.ConnectionTimeout = 900
adoCon.Open((Session("DBAddress")))
%>

一个地方比另一个地方更好,甚至只使用一个地方?或者既不可接受?

实际上,如果我把代码放在第一个块中,我也必须从第二个块移动代码,因为我需要为PageLoad代码添加ADODBConnection。

更新2

Ciprian的回答说:

如果aspx.vb页面不存在,请检查.aspx文件中的第一行。它看起来应该是这样的:

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default...

我的.aspx文件位于顶部:

<%@ Import namespace="ADODB" %>
<script language="VB" runat="Server">
. . .

IOW,我没有像Ciprian所期望的那样的第一线。该项目也没有&#34; Site.master&#34;页。

3 个答案:

答案 0 :(得分:1)

我认为你的意思是在ASPX页面上,而不是后面的代码。 ASP.Net将尝试在ASPX页面上按名称查找事件处理程序,因此这应该有效:

<script runat="server">
    Protected Sub Page_Load(Byval sender as Object, Byval e As EventArgs)
        'Code Here
    End Sub
</script>

答案 1 :(得分:1)

在Web窗体中,您有与视图对应的.aspx页面。每个页面都有一个带有类的代码隐藏文件(例如,About.aspx有一个About.aspx.vb类)。页面加载的代码应该放在Page_Load方法中:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

End Sub

您可以在此处查看Web窗体生命周期:https://msdn.microsoft.com/en-us/library/ms178472.aspx

如果aspx.vb页面不存在,请检查.aspx文件中的第一行。看起来应该是这样的:

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" Inherits="WebApplication4._Default" %>

注意&#34; CodeBehind&#34;和#34;继承&#34;属性。它们应分别指向文件后面的代码和类的名称。 .aspx.vb文件应如下所示:

Public Class _Default
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

    End Sub
End Class

此外,您需要一个.aspx.designer.vb文件,类似于:

'------------------------------------------------------------------------------
' <auto-generated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated. 
' </auto-generated>
'------------------------------------------------------------------------------

Option Strict On
Option Explicit On


Partial Public Class _Default
End Class

答案 2 :(得分:0)

事实证明,我需要做的就是把它放在代码的顶部,就像这样:

<%
Unit = Request.QueryString.Item("Unit")
MemberNo = Request.QueryString.Item("MemberNo")
CustNo = Request.QueryString.Item("CustNo")

'determine whether this unit is a new business
currentYear = Year(Now)
SQLString = "Select NewBiz from MasterUnitsprojSales where CYear = " & currentYear & " and Unit = '" & Unit & "'"
adoRS = New ADODB.Recordset
adoRS.Open(SQLString, adoCon)
IsNewBusiness = TRUE 'default (if record not found)
If Not adoRS.EOF Then
    IsNewBusiness = adoRS.Fields.Item(0).Value <> 0 
    Response.Write("<!-- IsNewBusiness after NOT EOF assignment = " & CStr(IsNewBusiness) & "-->")
End If
adoRS.Close()

If Request.Form.Item("Action") = "Save" Then
. . .