自定义控件加载两次,里面的函数执行了两次,该如何解决,急,在线等.....

clm0010 2005-08-30 05:35:28
我在网站底部文件写了一个 PageVisit() 函数,用于收集访问用户的IP等信息,然后,以
<%@ Page language="c#" Codebehind="gzdtList.aspx.cs" AutoEventWireup="false" Inherits="server.nn.gzdt.gzdtList" %>
<%@ Register TagPrefix="server" TagName="down" Src="/inc/controlDown.ascx" %>
......
<server:down id="down1" runat="server"></server:down>
的形式插入普通页面中,但是,却发现每次都有两条记录写进数据库,有的是同一时间,有的是相差1、2秒,估计是这个函数重复执行两次,最可能就是
controlDown.ascx加载了两次,怎么样才能让 PageVisit() 只执行一次呢??
...全文
301 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
clm0010 2005-12-23
  • 打赏
  • 举报
回复
谢谢,该结贴了,看来我要好好利用跟踪工具才行啊!
clm0010 2005-09-21
  • 打赏
  • 举报
回复
controlDown.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace server.inc
{
/// <summary>
/// ControlDown 的摘要说明。
/// </summary>
public class ControlDown : System.Web.UI.UserControl
{
string con=ConfigurationSettings.AppSettings["dsn"];
int quyu=int.Parse(ConfigurationSettings.AppSettings["quyu"]);

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
PageVisit();
}
}

private void PageVisit()
{
SqlConnection conn = new SqlConnection(con);//连接字符串
conn.Open();


SqlCommand myCommand=new SqlCommand("PageVisit",conn);

myCommand.CommandType=CommandType.StoredProcedure;

//SessionID
SqlParameter SessionID=new SqlParameter("@SessionID",SqlDbType.Char,50);
SessionID.Value=Session.SessionID;
myCommand.Parameters.Add(SessionID);

//网页地址
SqlParameter 网页地址=new SqlParameter("@网页地址",SqlDbType.Char,200);
网页地址.Value=Request.Url.AbsoluteUri;
myCommand.Parameters.Add(网页地址);

//IP
SqlParameter IP=new SqlParameter("@IP",SqlDbType.Char,50);
IP.Value=Request.UserHostAddress;
myCommand.Parameters.Add(IP);

//区域
SqlParameter qy=new SqlParameter("@区域",SqlDbType.Int);
qy.Value=quyu;
myCommand.Parameters.Add(qy);

//用户名
string userName;
if(Session["userName"] == null || Session["userName"].ToString() == "" || Session["userName"].ToString() == String.Empty)
{
userName="游客";
}
else
{
userName=Session["userName"].ToString().Trim();
}
SqlParameter 用户名=new SqlParameter("@用户名",SqlDbType.Char,50);
用户名.Value=userName;
myCommand.Parameters.Add(用户名);

myCommand.ExecuteNonQuery();

//Response.Write("运行!");

conn.Close();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
  • 打赏
  • 举报
回复
控件本身看来没有什么问题。你要在几个地方设断点跟踪一下打开新页面的时候页面装入了几次(有没有重定向)? 一次页面装入的中控件装入了几次,PageVisit又调用了几次?

你可以在 PageVisit 入口设置断点,然后再第一和第二次调用时显示调用堆栈信息(“调试->窗口->调用堆栈”),可以看出调用的次序,此时点击每一个调用点还可以看到调用下一个方法时的代码和环境变量,例如分析 isPostBack 的值的变化。
  • 打赏
  • 举报
回复
把调用 PageVisit() 函数 的事件贴出来。

把调用 PageVisit() 的地方设置端点,不是一次处理页面中会两次调用吗,把两次调用的“调用堆栈”信息贴出来。
  • 打赏
  • 举报
回复
把调用 PageVisit() 函数 的事件写清楚。

你可以端点执行,自己分析。
张海霖 2005-09-17
  • 打赏
  • 举报
回复
有的时候看看viewstate
clm0010 2005-08-30
  • 打赏
  • 举报
回复
网站所有的前台页面都用了这个底部,有全部换是不大可能的了。

我重新做了一个controlDown.ascx,问题依然没有解决。

但有一个想象,当第一次打开网站的时候,只有一条记录写进数据库,但以后的页面,就是两条的了,呵呵。
clm0010 2005-08-30
  • 打赏
  • 举报
回复
马上试试看!
coldpanth 2005-08-30
  • 打赏
  • 举报
回复
这个以前我也遇上过,一般来说有可能是放这个用户控件页面的问题,也可能是controlDown.ascx的问题,新建个用户控件,把现在这个所有的代码复制过去,再换一个新页面,放上这个控件,应该差不多大概就好了.

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧