
2006年10月9日
下面的代码实现了检测客户端显示器分辨率、浏览器类型和客户端IP的功能。你可以把客户端信息保存到Session,ViewState等中以便在其它的页面直接使用。
例子
ClientPeek.aspx
<%@ Page language="vb" EnableViewState="false" Codebehind="ClientPeek.aspx.vb"
AutoEventWireup="false" Inherits="aspxWeb.ClientPeek"%>
检测客户端显示器分辨率、浏览器类型和客户端IP
ClientPeek.aspx.vb
Imports System
Public Class ClientPeek
Inherits System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents MyBody As System.Web.UI.HtmlControls.HtmlGenericControl
#Region " Web 窗体设计器生成的代码 "
'该调用是 Web 窗体设计器所必需的。
Private Sub InitializeComponent()
End Sub
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim Button1 As New System.Web.UI.WebControls.Button
If Not Me.IsPostBack Then
Dim btnW As New System.Web.UI.HtmlControls.HtmlInputHidden
Dim btnH As New System.Web.UI.HtmlControls.HtmlInputHidden
Button1.ID = "Button1"
btnW.Name = "WidthPixel"
btnW.ID = "WidthPixel"
btnH.Name = "HeightPixel"
btnH.ID = "HeightPixel"
Me.FindControl("browserpeek").Controls.Add(btnW)
Me.FindControl("browserpeek").Controls.Add(btnH)
Me.FindControl("browserpeek").Controls.Add(Button1)
Dim scriptString As String = ""
scriptString += "document.browserpeek.WidthPixel.value=window.screen.width;"
scriptString += "document.browserpeek.HeightPixel.value=window.screen.height;"
Me.RegisterOnSubmitStatement("Meng", scriptString)
Me.MyBody.Attributes.Add("onload", "document.browserpeek.Button1.click();")
Else
Me.MyBody.Attributes.Remove("onload")
If Me.FindControl("browserpeek").Controls.Contains(Button1) Then
Me.FindControl("browserpeek").Controls.Remove(Button1)
Button1.Dispose()
End If
Dim strLabel As New System.Text.StringBuilder
Dim bc As HttpBrowserCapabilities = Request.Browser
strLabel.Append("您的浏览器的分辨率为:")
strLabel.Append(Request.Form("WidthPixel"))
strLabel.Append("×")
strLabel.Append(Request.Form("HeightPixel"))
strLabel.Append("
")
strLabel.Append("浏览器基本信息:
")
strLabel.Append("Type = " & bc.Type & "
")
strLabel.Append("Name = " & bc.Browser & "
")
strLabel.Append("Version = " & bc.Version & "
")
strLabel.Append("Major Version = " & bc.MajorVersion & "
")
strLabel.Append("Minor Version = " & bc.MinorVersion & "
")
strLabel.Append("Platform = " & bc.Platform & "
")
strLabel.Append("Is Beta = " & bc.Beta & "
")
strLabel.Append("Is Crawler = " & bc.Crawler & "
")
strLabel.Append("Is AOL = " & bc.AOL & "
")
strLabel.Append("Is Win16 = " & bc.Win16 & "
")
strLabel.Append("Is Win32 = " & bc.Win32 & "
")
strLabel.Append("支持 Frames = " & bc.Frames & "
")
strLabel.Append("支持 Tables = " & bc.Tables & "
")
strLabel.Append("支持 Cookies = " & bc.Cookies & "
")
strLabel.Append("支持 VB Script = " & bc.VBScript & "
")
strLabel.Append("支持 JavaScript = " & bc.JavaScript & "
")
strLabel.Append("支持 Java Applets = " & bc.JavaApplets & "
")
strLabel.Append("支持 ActiveX Controls = " & bc.ActiveXControls & "
")
strLabel.Append("CDF = " & bc.CDF & "
")
strLabel.Append("W3CDomVersion = " + bc.W3CDomVersion.ToString + "
")
strLabel.Append("UserAgent = " + Request.UserAgent + "
")
strLabel.Append("UserLanguages = " + Request.UserLanguages(0).ToString + "
")
strLabel.Append("
")
strLabel.Append("客户端计算机基本配置:
")
strLabel.Append("UserHostName = " + Request.UserHostName + "
")
strLabel.Append("UserHostAddress = " + Request.UserHostAddress + "
")
Label1.Text = strLabel.ToString()
End If
End Sub
End Class
C#代码
ClientPeek.aspx
<%@ Page language="c#" EnableViewState = "false" Codebehind="ClientPeek.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.ClientPeek" %>
检测客户端显示器分辨率、浏览器类型和客户端IP
ClientPeek.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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 eMeng.Exam
{
///
/// CheckPeek 的摘要说明。
///
public class ClientPeek : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.HtmlControls.HtmlGenericControl MyBody;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
System.Web.UI.WebControls.Button Button1 = new System.Web.UI.WebControls.Button();
if(!IsPostBack)
{
System.Web.UI.HtmlControls.HtmlInputHidden btnW = new System.Web.UI.HtmlControls.HtmlInputHidden();
System.Web.UI.HtmlControls.HtmlInputHidden btnH = new System.Web.UI.HtmlControls.HtmlInputHidden();
System.Web.UI.HtmlControls.HtmlInputHidden btnPDF = new System.Web.UI.HtmlControls.HtmlInputHidden();
Button1.ID = "Button1";
btnW.Name = "WidthPixel";
btnW.ID = "WidthPixel";
btnH.Name = "HeightPixel";
btnH.ID = "HeightPixel";
btnPDF.Name = "PDF";
btnPDF.ID = "PDF";
this.FindControl("browserpeek").Controls.Add(btnW);
this.FindControl("browserpeek").Controls.Add(btnH);
this.FindControl("browserpeek").Controls.Add(btnPDF);
this.FindControl("browserpeek").Controls.Add(Button1);
string scriptString = "";
scriptString += "document.all.browserpeek.WidthPixel.value=window.screen.width;\r\n";
scriptString += "document.all.browserpeek.HeightPixel.value=window.screen.height;\r\n";
scriptString += "document.all.browserpeek.PDF.value=PDFPlugin;\r\n";
this.RegisterOnSubmitStatement("Meng", scriptString);
this.MyBody.Attributes.Add("onload", "document.all."+Button1.ClientID+".click();");
}
else
{
this.MyBody.Attributes.Remove("onload");
if(this.FindControl("browserpeek").Controls.Contains(Button1))
{
this.FindControl("browserpeek").Controls.Remove(Button1);
Button1.Dispose();
}
System.Text.StringBuilder strLabel = new System.Text.StringBuilder();
HttpBrowserCapabilities bc = Request.Browser;
strLabel.Append("您的浏览器的分辨率为:");
strLabel.Append(Request.Form["WidthPixel"]);
strLabel.Append("×");
strLabel.Append(Request.Form["HeightPixel"]);
strLabel.Append("
");
strLabel.Append("浏览器基本信息:
");
strLabel.Append("Type = " + bc.Type + "
");
strLabel.Append("Name = " + bc.Browser + "
");
strLabel.Append("Version = " + bc.Version +"
");
strLabel.Append("Major Version = " + bc.MajorVersion + "
");
strLabel.Append("Minor Version = " + bc.MinorVersion + "
");
strLabel.Append("Platform = " + bc.Platform + "
");
strLabel.Append("Is Beta = " + bc.Beta + "
");
strLabel.Append("Is Crawler = " + bc.Crawler + "
");
strLabel.Append("Is AOL = " + bc.AOL + "
");
strLabel.Append("Is Win16 = " + bc.Win16 + "
");
strLabel.Append("Is Win32 = " + bc.Win32 + "
");
strLabel.Append("支持 Frames = " + bc.Frames + "
");
strLabel.Append("支持 Tables = " + bc.Tables + "
");
strLabel.Append("支持 Cookies = " + bc.Cookies + "
");
strLabel.Append("支持 VB Script = " + bc.VBScript + "
");
strLabel.Append("支持 JavaScript = " + bc.JavaScript + "
");
strLabel.Append("支持 Java Applets = " + bc.JavaApplets + "
");
strLabel.Append("支持 ActiveX Controls = " + bc.ActiveXControls + "
");
strLabel.Append("CDF = " + bc.CDF + "
");
strLabel.Append("W3CDomVersion = " + bc.W3CDomVersion.ToString() + "
");
strLabel.Append("UserAgent = " + Request.UserAgent + "
");
strLabel.Append("UserLanguages = " + Request.UserLanguages[0].ToString() + "
");
strLabel.Append("
");
strLabel.Append("客户端计算机基本配置:
");
strLabel.Append("UserHostName = " + Request.UserHostName + "
");
strLabel.Append("UserHostAddress = " + Request.UserHostAddress + "
");
strLabel.Append("PDF 6.0 插件是否安装 = " + Request.Form["PDF"] + "
");
Label1.Text = strLabel.ToString();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
posted @ 2006-10-09 17:15 绯村剑心 阅读(262) 评论(0)
编辑
由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。
实现思路
利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。
查看示例
SingleLogin.aspx代码
<%@ Page language="c#" Codebehind="SingleLogin.aspx.cs" AutoEventWireup="false"
Inherits="eMeng.Exam.SingleLogin" %>
单点登录测试
SingleLogin.aspx.cs代码
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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 eMeng.Exam
{
///
/// SingleLogin 的摘要说明。
/// 实现单点登录
///
public class SingleLogin : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox UserName;
protected System.Web.UI.WebControls.TextBox PassWord;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Button Login;
private void Page_Load(object sender, System.EventArgs e)
{
// 实际例子可访问:
// http://dotnet.aspx.cc/Exam/SingleLogin.aspx
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.Login.Click += new System.EventHandler(this.Login_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Login_Click(object sender, System.EventArgs e)
{
// 作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
// 做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。
// 生成Key
string sKey = UserName.Text + "_" + PassWord.Text;
// 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session["User"] = sKey;
// 首次登录,您可以做您想做的工作了。
Msg.Text="
";
}
else
{
// 在 Cache 中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text="
抱歉,您好像已经登录了呀:-(
";
return;
}
}
}
}
posted @ 2006-10-09 17:12 绯村剑心 阅读(851) 评论(2)
编辑
对于加载时间比较长的ASP.NET页面,我们可以在客户端浏览器中显示进度条来显示页面正在装载。下面就是具体的实现过程:
- 新建项目,名字为WebPortal,在项目类型中选择Visual C#项目或者Visual Basic项目都可;
- 在模板类型中选择ASP.NET Web应用程序;
- 位置里输入:http://localhost/WebPortal;
- 添加新项:名字为ShowProgress的Web窗体。
- 在您的Web窗体ShowProgress.aspx上添加任何其他的Web服务器控件。
- 在ShowProgress.aspx上单击右键,点“查看代码”,在最上面输入:
Visual C# .NET代码 using System.Threading;
Visual Basic .NET代码 Imports System.Threading
- 在Page_Load事件里输入: Visual C# .NET代码 Response.Write("
");
Response.Write("_");
Response.Write("
");
Response.Write("
");
Response.Write("
");
Response.Flush();
Thread.Sleep(10000);
Visual Basic .NET代码 Response.Write("
")
Response.Write("_")
Response.Write("
")
Response.Write("
")
Response.Write("
")
Response.Flush()
Thread.Sleep(10000)
- 在ShowProgress.aspx窗体的html的中输入:
- 点在浏览器中查看即可。
posted @ 2006-10-09 16:27 绯村剑心 阅读(194) 评论(0)
编辑
下面是模仿的DropDownList的效果,支持图片,多列,换行等。查看例子
WebDropDownList.aspx
<%@ Page language="c#" Codebehind="WebDropDownList.aspx.cs"validateRequest="false"
AutoEventWireup="false" Inherits="eMeng.WebDropDownList" %>
模拟下拉列表框
模拟下拉框
WebDropDownList.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
namespace eMeng
{
///
/// ShowList 的摘要说明。
///
public class WebDropDownList : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
DataGrid1.Columns[0].ItemStyle.Width = Unit.Pixel(400);
DataGrid1.Columns[1].ItemStyle.Width = Unit.Pixel(100);
Data_Bind();
}
public void Data_Bind()
{
Response.CacheControl = "no-cache";
Response.Expires = -1;
try
{
string strSQL = "SELECT id,objectGuid,Title,CreateDate,HitCount FROM Document ORDER BY id DESC";
string cnString = (new Connection()).ConnectionString;
OleDbConnection cn = new OleDbConnection(cnString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(strSQL, cn);
DataGrid1.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
DataGrid1.DataBind();
cn.Close();
cn.Dispose();
cn = null;
cmd.Dispose();
cmd = null;
}
catch(OleDbException myOleDbException)
{
Response.Write("错误:" + myOleDbException.Message + ":" + myOleDbException.HelpLink);
Response.End();
}
}
private void DataGrid1_ItemDataBound(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if( e.Item.ItemIndex != -1 )
{
e.Item.Attributes.Add("onmouseover", "this.bgColor='#C1D2EE'");
e.Item.Attributes.Add("onclick",
"document.all.text1.innerText=this.cells[0].innerText;document.all.form1.city.value=this.cells[0].innerText;");
if (e.Item.ItemIndex % 2 == 0 )
{
e.Item.Attributes.Add("bgcolor", "#FFFFFF");
e.Item.Attributes.Add("onmouseout", "this.bgColor=document.getElementById('DataGrid1').getAttribute('singleValue')");
}
else
{
e.Item.Attributes.Add("bgcolor", "oldlace");
e.Item.Attributes.Add("onmouseout", "this.bgColor=document.getElementById('DataGrid1').getAttribute('oldValue')");
}
}
else
{
DataGrid1.Attributes.Add("oldValue", "oldlace");
DataGrid1.Attributes.Add("singleValue", "#FFFFFF");
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
posted @ 2006-10-09 15:16 绯村剑心 阅读(282) 评论(0)
编辑