ASP.NET页面加载由于位图而运行两次。保存
我已经创建了一个VB.NET页面来记录广告的浏览量,并将从img src调用该页面ASP.NET页面加载由于位图而运行两次。保存,asp.net,vb.net,bitmap,pageload,Asp.net,Vb.net,Bitmap,Pageload,我已经创建了一个VB.NET页面来记录广告的浏览量,并将从img src调用该页面 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim insert_number As Integer = 0 Dim ad_id As Integer = 0 If Request.QueryString("adid") Is Nothing Then ad_i
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim insert_number As Integer = 0
Dim ad_id As Integer = 0
If Request.QueryString("adid") Is Nothing Then
ad_id = 0
Else
If Not Integer.TryParse(Request.QueryString("adid"), ad_id) Then
ad_id = 0
End If
End If
Dim connectStr As String = System.Configuration.ConfigurationManager.AppSettings("connectStr").ToString()
Dim myconnection As SqlConnection = New SqlConnection(connectStr)
Dim mySqlCommand As SqlCommand
myconnection.Open()
Try
mySqlCommand = New SqlCommand("sp_record", myconnection)
mySqlCommand.CommandType = CommandType.StoredProcedure
mySqlCommand.Parameters.AddWithValue("@record_id", ad_id)
insert_number = mySqlCommand.ExecuteNonQuery()
Catch ex As Exception
End Try
myconnection.Close()
Dim oBitmap As Bitmap = New Bitmap(1, 1)
Dim oGraphic As Graphics = Graphics.FromImage(oBitmap)
oGraphic.DrawLine(New Pen(Color.Red), 0, 0, 1, 1)
'Response.Clear()
Response.ContentType = "image/gif"
oBitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)
'oBitmap.Dispose()
'oGraphic.Dispose()
End Sub
除非我对oBitmap.Save行进行注释,否则代码将运行两次,并向数据库进行两次插入(store prcoedure运行两次)
我在@PAGE上尝试了AutoEventWireup=“true”和“false”。“true”运行代码两次,“false”没有执行任何操作(没有错误),也没有给出任何输出
我也尝试过创建1像素图像输出的以下版本,但它也运行了两次(在@PAGE part中需要aspcompat=true):
欢迎您提出任何想法。您可能需要对图像执行一个onload函数,以了解第二次调用图像的原因。我猜它在预加载的某个地方被加载,然后在页面加载过程中被调用(.Save),这就是为什么您会看到双条目 如果您试图获得唯一的页面加载,您可能希望尝试将oBitmap.Save行放入页面加载中的回发检查中,如下所示:
If Page.IsPostback = False Then
'Bitmap Code Here
End If
看看这是否能帮你解决问题
如果从数据库加载数据,则需要确保它也在回发检查范围内(因为a.加载数据两次,b.在某些情况下可能会导致这些双重回发)
编辑:希望编辑代码部分以包含所有位图代码,而不仅仅是保存。不确定具体内容,但在页面加载功能中有大量代码
一般来说,我解决这类问题的方法是使用一些页面参数,您可以检查这些参数,以便执行正确的操作。在调用中添加一些get/post参数,您可以检查这些参数,或者检查页面。iPostback我知道这是一篇旧文章,但我遇到了一个类似的问题,页面在回发时触发了两次。我发现有几篇帖子在暗示这里正在讨论什么。但是,纠正我的问题的是在页面级别设置页面指令属性AutoEventWireup=false 这是一篇帮助我解决这个问题的好文章 希望这有帮助
Risho我添加了Page.ISPostback部分。如果我从标记调用所有代码,所有代码都可以正常工作,但是如果我直接从URL调用页面,它可以工作两次,即使所有内容都在页面内。IsPostback checkOk,听起来像是发生了什么,因为代码在加载过程中被加载,它被加载,然后在加载图像本身时再次初始化。您可以做一些检查,看看代码是否被页面或img调用,然后如果代码被页面调用,就不执行代码?或者,另一种选择是将此代码放入img的load函数(更改为asp:image控件)中,然后查看是否只调用一次。我今天会玩弄它,看看是否可以复制/解决这个问题。为了澄清问题,代码似乎在页面加载时运行,然后在图像代码返回数据时再次运行。今天早上我会看一看,看看我有什么想法。好的,我不能用我的开发机器提供的代码来复制您遇到的问题。不管页面如何调用,我只调用了一次(page_load),db代码只调用了一次。当然,我已经注释掉了您的DB代码,并在其中添加了一个小变量,这样我就可以包含一个断点。该变量仅在页面加载时被引用一次。尝试注释DB代码(我知道最终结果需要它,但仅针对此测试),并在其中放置一个变量和断点,看看是否为您调用了两次。
If Page.IsPostback = False Then
'Bitmap Code Here
End If