如何在旧 ASP.NET 站点的 "PageLoad" 上为 运行 指定代码?
How can I specify code to run on "PageLoad" in an old ASP.NET site?
我正在维护一个具有如下代码的旧站点:
<%
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 期望的那样的第一行。该项目也没有 "Site.master" 页。
我假设您指的是在 ASPX 页面上,而不是背后的代码。 ASP.Net 将尝试在 ASPX 页面上按名称查找事件处理程序,因此这应该有效:
<script runat="server">
Protected Sub Page_Load(Byval sender as Object, Byval e As EventArgs)
'Code Here
End Sub
</script>
在 Web 窗体中,您有与视图对应的 .aspx 页面。每个页面都有一个带有 class 的代码隐藏文件(例如 About.aspx 有一个 About.aspx.vb class)。页面加载的代码应该放在你的 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" %>
注意 "CodeBehind" 和 "Inherits" 属性。它们应该分别指向代码隐藏文件和 class 的名称。 .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
原来我需要做的只是把它放在代码的顶部,就像这样:
<%
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
. . .
我正在维护一个具有如下代码的旧站点:
<%
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 期望的那样的第一行。该项目也没有 "Site.master" 页。
我假设您指的是在 ASPX 页面上,而不是背后的代码。 ASP.Net 将尝试在 ASPX 页面上按名称查找事件处理程序,因此这应该有效:
<script runat="server">
Protected Sub Page_Load(Byval sender as Object, Byval e As EventArgs)
'Code Here
End Sub
</script>
在 Web 窗体中,您有与视图对应的 .aspx 页面。每个页面都有一个带有 class 的代码隐藏文件(例如 About.aspx 有一个 About.aspx.vb class)。页面加载的代码应该放在你的 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" %>
注意 "CodeBehind" 和 "Inherits" 属性。它们应该分别指向代码隐藏文件和 class 的名称。 .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
原来我需要做的只是把它放在代码的顶部,就像这样:
<%
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
. . .