原理及优点:通过XML中的XMLHTTP组件调用其它网站上的网页,然后批量截取或替换原有的信息使其转化成变量后再一一储存到数据库中。其主要的优点便是无需再手工添加大量的信息了,可以指定对某一个站信息的截取进行批量录入,达到省时省力的目的。与其单纯的ASP小偷程序不同的是:它已经不再依赖其目标网站。
参考代码:
<%
'声明取得目标信息的函数,通过XML组件进行实现。
Function Geturl(/blog/url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "GET", url, False
.Send
GetURL = bytes2bstr(.responsebody)
'对取得信息进行验证,如果信息长度小于100则说明截取失败
if len(.responsebody)<100 then
response.write "获取远程文件 <a href="&url&" target=_blank>"&url&"</a> 失败。"
response.end
end if
End With
Set Retrieval = Nothing
End Function
' 二进制转字符串,否则会出现乱码的!
function bytes2bstr(vin)
strreturn = ""
for i = 1 to lenb(vin)
thischarcode = ascb(midb(vin,i,1))
if thischarcode < &h80 then
strreturn = strreturn & c ......
这个简易方法,取经自:http://www.qumiao.com
以下是Global.asax文件的内容。
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Timers" %>
<%@ Import Namespace="System.Net" %>
<script runat="server">
protected void Application_Start(object sender, EventArgs e) {
//每5秒执行一次周期任务
Timer myTimer = new Timer(5000);
myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled = true;
myTimer.AutoReset = true;
}
protected void Application_End(object sender, EventArgs e) {
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,
//目的是要激发Application_Start
System.Threading.Thread.Sleep(1000);
WebRequest.Create("http://localhost/").GetResponse();
}
void myTimer_Elapsed(object source, ElapsedEv ......
开发中我们经常会遇到有一个主页面以列表方式分页显示数据,并提供多种查询条件,可对查询结果记录进行修改、删除等操作,在操作页面执行完毕后需返回查询页面,这时常常会丢失查询条件和当前所在页,我们可通过页面状态保存来解决查询页条件和分页信息丢失的问题。
我们通常重写Page类中的protected override object LoadPageStatefromPersistenceMedium(),
protected override void SavePageStateToPersistenceMedium(object state),
protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument),
protected override System.Collections.Specialized.NameValueCollection DeterminePostBackMode(),四个方法来解决。但大家一般会在RaisePostBackEvent重写中判断恢复页面时,不执行里面的base.RaisePostBackEvent(sourceControl, eventArgument);以禁止事件重新执行的情况,但往往却带了意想不到的情况,如修改结果没有刷新、删除记录没有刷新。虽说这样做性能提高了,但数据刷新却无法解决,要想避免这一问题,办法很简单,就是不要重写RaisePostBackEvent,让查询页面在恢复状态时重新执行上次回发事件,这样结 ......
//这种是定时间点执行任务的asp.net简易解决方案。
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
private static System.Threading.Timer timer = null;
protected void Application_Start(object sender, EventArgs e) {
//计算现在到目标时间要过的时间段。
DateTime LuckTime = DateTime.Now.Date.Add(new TimeSpan(16, 59, 58));
TimeSpan span = LuckTime - DateTime.Now;
if (span < TimeSpan.Zero) {
span = LuckTime.AddDays(1d) - DateTime.Now;
}
object state = new object();//要传递的状态或者对象。
timer = new System.Threading.Timer(
new TimerCallback(CertainTask), state,
span, TimeSpan.fromTicks(TimeSpan.TicksPerDay));
}
protected void Application_End(object sender, EventArgs e) {
if (timer != null) { timer.Dispose(); }
}
//这里是指定时间执行的代码,必须是静态的。
private static void CertainTask(object state) {
}
</script> ......
学习如何创建自定义验证控件。我们将创建两个自定义控件,首先创建LengthValidator控件,它用于验证表单字段中的内容的长度;然后创建
AjaxValidator控件。AjaxValidator控件通过把信息传到定义在服务器端的自定义函数来在客户端执行验证。
我们通过从BaseValidator
类派生一个新的控件来创建新的验证控件。如名字所示,BaseValidator类是所有验证控件的基类,包括RequiredFieldValidator控件和RegularExpressionValidator控件。
BaseValidator类是一个抽象(abstract)类,它要求子类必须实现一个方法:
q EvaluateIsValid——当被检验的表单字段通过验证时返回True。
BaseValidator类也包含一些其他的方法,可以重写(override)或做别的用途。这些方法中最有用的是下面这个:
q GetControlValidationValue——用于获取被验证的控件的值。
创建自定义验证控件时,要重写EvaluateIsValid()方法,并在EvaluateIsValid()方法中调用GetControlValidationValue来获得被验证的表单字段的值。
3.8.1 创建LengthValidator控件
为了展示创建自定义验证控件的一般技巧,本节将先创建一个非常简单的、用于验证表单字段长度的自定义验证控件—&mdash ......
学习如何创建自定义验证控件。我们将创建两个自定义控件,首先创建LengthValidator控件,它用于验证表单字段中的内容的长度;然后创建
AjaxValidator控件。AjaxValidator控件通过把信息传到定义在服务器端的自定义函数来在客户端执行验证。
我们通过从BaseValidator
类派生一个新的控件来创建新的验证控件。如名字所示,BaseValidator类是所有验证控件的基类,包括RequiredFieldValidator控件和RegularExpressionValidator控件。
BaseValidator类是一个抽象(abstract)类,它要求子类必须实现一个方法:
q EvaluateIsValid——当被检验的表单字段通过验证时返回True。
BaseValidator类也包含一些其他的方法,可以重写(override)或做别的用途。这些方法中最有用的是下面这个:
q GetControlValidationValue——用于获取被验证的控件的值。
创建自定义验证控件时,要重写EvaluateIsValid()方法,并在EvaluateIsValid()方法中调用GetControlValidationValue来获得被验证的表单字段的值。
3.8.1 创建LengthValidator控件
为了展示创建自定义验证控件的一般技巧,本节将先创建一个非常简单的、用于验证表单字段长度的自定义验证控件—&mdash ......
在网上找了好多,实现方式大多是使用定时器
个人觉得定时器会造成一定程度上的假象
(如:定时器还没结束页面已经加载完毕,或定时器结束后页面还没加载完成)
本方法利用的是javascript,先网页面里面写入一个层,显示加载框,然后等页面结束后
在body的onload中写入事件,隐藏该对话框
方法(我的系统是多个页面,所以写了一个公用的类common.cs):
在类里面加入如下函数(也可在每个代码后文件中写入):
#region "页面加载中效果"
/// <summary>
/// 页面加载中效果
/// </summary>
public static void initJavascript()
{
HttpContext.Current.Response.Write(" <mce:script language=JavaScript type=text/javascript><!--
");
HttpContext.Current.Response.Write("var t_id = setInterval(animate,20);");
HttpContext.Current.Response.Write("var pos=0;var dir=2;var len=0;");
HttpContext.Current.Response.Write("function animate(){");
HttpContext.Current.Response.Write("var elem = document.getElementById('progress');");
HttpContext.Current.Response.Write("if(elem != null) {");
HttpContext.Current. ......