[英]ASP classic code keeps reloading
我有一个ASP.NET网站,其中包含一些运行经典ASP代码的aspx页面。 下面的查询用经典的ASP代码编写,它使用App_Code文件(dbConn)运行查询。
<%
SQL1 = "INSERT INTO table (field1, field2, field3) VALUES ('" & value1 & "', '" & value2 & "', '" & value3 & "')"
dbConn.ExecuteCommand(SQL1)
%>
我面临的问题是,具有查询的文件(假设它为“ query.aspx”)会不断调用该查询,并无限次地用相同的条目填充数据库,即使页面“ query.aspx”仅被调用一次。另一个文件为
<!-- #include file="inc/query.aspx" -->
我的问题是,即使整个项目中只包含一次页面,为什么页面仍不断重复执行查询? 即使没有多次包含“ query.aspx”页面,它也会被多次调用吗?
首先要了解的是* .aspx页面是ASP.Net,而不是经典的ASP。
掌握了这些信息之后,我们还需要了解有关ASP.Net如何处理页面的一些知识 。 如果您使用的是Web表单,则ASP.Net会做很多工作来向您隐藏HTTP请求/响应模型。 取而代之的是,您看到一个试图使网页看起来像Windows窗体的模型:您获得一个窗体实例,可以从中添加和删除控件。
除了那不是很正确。 您实际上并没有获得表单实例。 您只会得到一个Form 类型 。 ASP.Net不会完全隐藏请求/响应模型。 页面上的每个请求都使用与上一个请求不同的表单实例,即使在同一用户和会话中也是如此。 您处理的每个控件事件都会产生一个新请求,并且每次发生此事件时,ASP.Net运行时都必须从头开始重建整个页面实例。
这意味着一个用户查看一个ASP.Net页面将导致该页面的代码在与该页面交互时多次运行。 如果该页面上有一个<!-- #include
指令,则该指令将针对每个控制事件重新执行。
要解决此问题,请首先使用支持独立于sql命令字符串发送查询参数数据的数据库类替换Query.aspx文件。 然后将这样的代码放入* .aspx页面中,以使用该新类:
Sub Page_Load
If Not IsPostBack
' Call the database code from here
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.