我创建了一个用于记录广告视图的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_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行,否则代码会运行两次并且它会向数据库进行两次插入(将prcoedure运行两次)。
我在@PAGE尝试过AutoEventWireup =“true”和“false”。 “true”运行代码两次,“false”没有执行任何操作(没有错误)并且也没有提供任何输出。
我也试过以下版本创建1像素图像输出,但它确实运行了两次(它在@PAGE部分需要aspcompat = true):
'Response.ContentType = "image/gif"
'Dim objStream As Object
'objStream = Server.CreateObject("ADODB.Stream")
'objStream.open()
'objStream.type = 1
'objStream.loadfromfile("c:\1pixel.gif")
'Response.BinaryWrite(objStream.read)
欢迎任何想法。
答案 0 :(得分:1)
您可能希望为图像执行onload功能,以查看为何第二次调用它。我猜测它在预加载中被加载到某个地方然后在页面加载期间被调用(.Save),这就是你看到双重输入的原因。
如果您尝试获取唯一的页面加载,您可能想尝试在页面加载中将oBitmap.Save行放入检查中以进行回发:
If Page.IsPostback = False Then
'Bitmap Code Here
End If
看看是否能为你修复它。
如果您正在从数据库加载数据,那么您需要确保它也在PostBack检查范围内(因为a。您正在加载数据两次而且b。它可能会导致某些数据的双回发)的情况下)。
编辑:想要编辑代码部分以包含所有位图代码,而不仅仅是保存。
答案 1 :(得分:1)
不确定具体细节,但这是Page_Load函数中的大量代码。
通常,我解决此类问题的方法是使用某种页面参数,您可以检查它们以执行正确的操作。在您可以检查的电话中添加一些 get / post 参数,或者检查 Page.IsPostBack 等内容。
答案 2 :(得分:0)
我意识到这是一个老帖子,但我有一个类似的问题,页面在回发上发射了两次。我发现有几个帖子在这里消解了什么。但是,更正了我的问题是在页面级别设置页面指令属性AutoEventWireup = false。
这是一篇很好的文章How to use the AutoEventWireup attribute in an ASP.NET Web Form by using Visual C# .NET,帮助我解决了这个问题。
希望这有帮助!
Risho