webform按回车就自动刷新页面_c#webform空间回车自动提交 - CSDN
精华内容
参与话题
  • 一个 Ajax 查询的功能,代码如下:<form name="keywordForm" method="post" action=""> <p id="profile_nav"> &...
    一个 Ajax 查询的功能,代码如下:
    <form name="keywordForm" method="post" action="">    
    	<p id="profile_nav">    
    		<label for="profile"> 关键字搜索: </label>    
    		<input style="width:80; height:20" type="text" name="keyword" οnkeypress="searchKeywordKeyboard(event)" />    
    		<input type="button" value="搜索" onClick="searchKeyword()">    
    	</p>   
    </form>

    在文本框中输入关键字按回车,页面自动刷新了,结果肯定是没有实现无刷新搜索了。想了想,可能是按回车后默认提交了表单,于是将form去掉,果然不刷了。但是还是会有很多地方需要用到form。

    一个表单下,如果只有一个文本框时,按下回车将会触发表单的提交事件。

    既然是只有一个文本框才会出问题,那么可以加一个隐藏的文本框,如下:

    <input id="hiddenText" type="text" style="display:none" />  

    结论是,可以采取两种方法解决这种问题:1.去掉表单;2.如果非得用表单,只要不让表单里有且只有一个文本框就OK了。

    如果以上的方法还不足以让你去解决问题,那么你可以用以下方法来阻止因为回车而引起的表单自动提交:

    <form name="keywordForm" method="post" action="" οnsubmit="return false;">    
    	<p id="profile_nav">    
    		<label for="profile"> 关键字搜索: </label>    
    		<input style="width:80; height:20" type="text" name="keyword" οnkeypress="searchKeywordKeyboard(event)" />    
    		<input id="hiddenText" type="text" style="display:none" οnkeypress="searchKeywordKeyboard(event)" />  
    		<input type="button" value="搜索" onClick="searchKeyword()">    
    	</p>   
    </form>  

    就是在表单 form 后面加上一个 onsubmit 事件,返回 false,来阻止 form 提交。

    原文出处:http://www.nowamagic.net/html/html_EnterCouseReflesh.php



    展开全文
  • 不要急于改变焦点,这时输入你需要的注释后,再按回车,焦点会跳转到下一行,而保留你刚才输入的注释了。          有两个窗口:WebForm1和WebForm2,WebForm1中有按钮Button1,点击后弹出窗口WebForm2。...
    ctrl   +   k,s
    先输入#region,再按Tab键,会自动弹出#endregion,并且焦点停留在#region处。不要急于改变焦点,这时输入你需要的注释后,再按回车,焦点会跳转到下一行,而保留你刚才输入的注释了。
     
     
     
     
     有两个窗口:WebForm1和WebForm2,WebForm1中有按钮Button1,点击后弹出窗口WebForm2。在WebForm2中有按钮Button2(功能为向数据库中写入数据)和Button3(功能:关闭页面)。点击Button3后,WebForm2关闭,同时返回WebForm1页面并且自动刷新,显示修改后的数据。

    第一种方法:(我用的这种,成功的)
    window.open打开新窗口,在关闭新窗口时:window.opener.location.reload();self.close();

     请问window.opener.parent.location.reload();self.close()是什么意思? 

     最佳答案

    让打开这个窗口的父窗口刷新,然后本子窗口关闭!
     
     
    window.opener.location.reload();的一个错误,如何解决 
    
    --------------------------------------------------------------------------------
    if (frames.name=="")
    {
    window.opener.location.reload();
    self.close();
    }
    else
    {
    var strPath=GetDatabasePath();
    
    strPath=strPath+"/Frm_ShowViewContent?OpenForm&ViewName=view_allInformation";
    window.location=strPath;
    }
    以上为"退出"按扭的JS,点击后要返回到
    http://dhoa/dhccoasf/information.nsf...allInformation
    出现错误提示为
    window.opener.location为空或不是对象,JS不太会调,希望大家指点一下  
          
    
     
    
     人家要一个IE窗口用window.open打开另一个IE窗口,才有作用的。
    你直接一个IE窗口嘛,当然为空了,如果你没有通过window.open来打开的话,干脆注释掉好了。  
    
    
    
    也就是说。如果你是Jquery遮罩弄的一个窗口,那么这种方法不可用。因为你不是window.open打开的新窗口。
    而是根据Jquery 生成的插入到本窗口的HTML BODY 中的另一个《HTML》的窗口内容。
    
    
    展开全文
  • 软件测试中的43个功能测试点总结

    万次阅读 2016-11-27 02:18:30
    每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以...

    针对web系统的常用测试方法如下:

    1. 页面链接检查:

    每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。

    2. 相关性检查:

    功能相关性:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。
    数据相关性:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。

    3. 检查按钮的功能是否正确:

    如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。

    4. 字符串长度检查: 

    输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。

    5. 字符类型检查: 

    在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。

    6. 标点符号检查: 

    输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。

    7.特殊字符检查:

    输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。常见的错误是出现在% ‘ ” 这几个特殊字符

    8. 中文字符处理: 

    在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

    9. 检查信息的完整性:

    在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。

    10. 信息重复: 

    在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。

    11. 检查删除功能:

    在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除, 看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。

    12. 检查添加和修改是否一致: 

    检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

    13. 检查修改重名:

    修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

    14. 重复提交表单:

    一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能。

    15. 检查多次使用返回键的情况:

     在有返回键的地方,返回到原来页面,重复多次,看会否出错。

    16. 搜索检查: 

    有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。

    17. 输入信息位置: 

    注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。

    18. 上传下载文件检查:

    上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。

    19. 必填项检查:

    应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

    20. 快捷键检查:

    是否支持常用快捷键,如Ctrl+C、 Ctrl+V、 Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

    21. 回车键检查: 

    在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。

    22.刷新键检查:

    在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。

    23.回退键检查:

    在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

    24.直接URL链接检查:

    在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。

    25.空格检查:

    在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

    26.输入法半角全角检查:

    在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

    27.密码检查:

    一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

    28.用户检查:

    任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。

    29.系统数据检查:

    这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    30.系统可恢复性检查:

    以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。

    31.确认提示检查:

    系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于Update或Delete操作,要求进行事前提示。

    32.数据注入检查:

    数据注入主要是对数据库的注入,通过输入一些特殊的字符,如“’”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘ ’ and name = ‘ ’,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于update和delete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc》,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中插入数据,比如用Jmeter,来完成数据注入检查。

    33.刷新检查:

    web系统中的WebForm. 控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。

    34.事务检查:

    对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。

    35.时间日期检查:

    时间、日期验证是每个系统都必须的,如2006-2-29、2006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如2006年2月28日、2006-2-28、20060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制。

    36.多浏览器验证:

    越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:Maxthon、Firefox、Tencent Traveler等,考虑使用多种浏览器访问系统,验证效果。

    37.安装测试:

    对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。

    38.文档测试:

    主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。

    39.测试数据检查:

    事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。

    40.请让我的机器来运行:

    在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。

    41.Ajax技术的应用:

    Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。

    42.Ajax技术的应用:

    Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。

    43.脚本错误:

    随着Ajax、IFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中


    展开全文
  • asp.net夜话之五:Page类和回调技术

    万次阅读 热门讨论 2009-09-11 11:44:00
    Page类和回调技术在今天我主要要介绍的有如下知识点:Page类介绍Page的生命周期IsPostBack属性ClientScriptManager类回调技术(CallBack) Page类介绍asp.net有时候也被成为WebForm,因为开发一个asp.net页面就像开发...

    《asp.net夜话》封面

    asp.net夜话之五:Page类和回调技术

    在今天我主要要介绍的有如下知识点:
    Page类介绍
    Page的生命周期
    IsPostBack属性
    ClientScriptManager类
    回调技术(CallBack)

     

    Page类介绍


    asp.net有时候也被成为WebForm,因为开发一个asp.net页面就像开发一个WinFrom窗体一样,我们同样可以采用拖拽控件、双击产生相关处理代码的方法。在asp.net中,创建一个页面可以采用两种模型。


    单页模型
    用Dreamweaver创建的asp.net页面就是单页模型,当然利用Visual Studio 2005也能创建单页模型,不过在Visual Studio 2005中创建的页面默认不是单页模型,要想在Visual Studio 2005创建单页模型的网页如下:
     
    注意确保“将代码放在单独的文件中”选项处于未选中状态,默认情况下这个选项是处于选中状态的。这样就创建了单页模型的网页。
    此时的页面代码如下:


     

    1. <%@ Page Language="C#" %>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <script runat="server">
    4. </script>
    5. <html xmlns="http://www.w3.org/1999/xhtml" >
    6. <head runat="server">
    7.     <title>无标题页</title>
    8. </head>
    9. <body>
    10.     <form id="form1" runat="server">
    11.     <div>
    12.     
    13.     </div>
    14.     </form>
    15. </body>
    16. </html>

    注意在页面中有这样一句代码:

    1. <script runat="server">
    2. </script>

    这句代码与普通javascript语句块不同的是有一个runat="server"属性,表示这里的代码是在服务器上运行的C#代码。切换到设计视图,然后双击页面,然后这部分会变成如下的样子:

    1. <script runat="server">
    2.     protected void Page_Load(object sender, EventArgs e)
    3.     {
    4.     }
    5. </script>

    其中Page_Load就是页面加载的时候在服务器上运行的方法。
    单页模型的特点是HTML标记、控件代码及服务器端运行的C#代码全部包含在一个aspx页面中,Web服务器第一次运行该页面的时候会将这个页面生成一个类文件,对于上面的Index.aspx页面,会生成ASP.Index_aspx的类,然后再将这个ASP.Index_aspx类编译成IL代码,Web服务器通过CLR(Common Language Runtime,通用语言运行环境)运行相应的IL代码。
    单页模型的缺点是页面和代码混在一起,维护起来较为麻烦。

     

    代码页面分离模式
    代码页面模式就是将页的标记(HTML代码)和服务器端元素放在.aspx页面中,而也代码在位于一个.aspx.cs中。采用默认方式创建的aspx网页就是这种方式。
    下面就是一个采用代码页面分离模式创建的Home.aspx页面的代码:


     

    1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" %>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml" >
    4. <head runat="server">
    5.     <title>无标题页</title>
    6. </head>
    7. <body>
    8.     <form id="form1" runat="server">
    9.     <div>
    10.     
    11.     </div>
    12.     </form>
    13. </body>
    14. </html>

    其对应的页代码是:


     

    1. using System;
    2. using System.Data;
    3. using System.Configuration;
    4. using System.Collections;
    5. using System.Web;
    6. using System.Web.Security;
    7. using System.Web.UI;
    8. using System.Web.UI.WebControls;
    9. using System.Web.UI.WebControls.WebParts;
    10. using System.Web.UI.HtmlControls;
    11. public partial class Home : System.Web.UI.Page
    12. {
    13.     protected void Page_Load(object sender, EventArgs e)
    14.     {
    15.     }
    16. }

    首先要关注的aspx的头部分代码:

    1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" %>

    @Page是一个页面指令,在这里Language="C#"指明了当前页面采用的后台代码是C#语言,CodeFile="Home.aspx.cs"表示这个页面对应的页代码文件是Home.aspx.cs这个文件,Inherits="Home"表示当前aspx页继承自Home这个类。
    现在再关注一下页代码文件声明:

    1. public partial class Home : System.Web.UI.Page

    从这部分代码可以看出Home类是继承自System.Web.UI.Page类的。注意这里还有一个C#2.0的关键字partial,这个关键字表示当前代码是一个局部类,以表示这个类是构成整个Web页面窗体的一部分。Web服务器运行这个页面的时候最终会将aspx页面和对应的页代码编译成一个类文件,然后生成IL代码。
    代码页面分离模式的好处是页面展示部分和逻辑控制部分的代码分离开来,便于管理和维护,这也是微软推荐的开发方式。

     

    asp.net页面的声明周期
    asp.net页面运行的时候将经历一个声明周期,这个生命周期中会进行一系列的操作,调用一系列的方法。了解asp.net页面的生命周期对于精确控制页面的控件呈现方式和行为非常重要。
    一般说来一个常规页面要经历如下几个生命周期阶段:

     

    阶段 说明
    页请求 页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。
    开始 在开始阶段,将设置页属性,如 Request 和 Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。
    页初始化 页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
    加载 加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
    验证 在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。
    回发事件处理 如果请求是回发请求,则将调用所有事件处理程序。
    呈现 在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的 Response 属性的 OutputStream。
    卸载 完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如 Response 和 Request)并执行清理。

    在页的生命周期中,一般会有如下事件:


    页事件 典型使用
    Page_PreInit 使用 IsPostBack 属性确定是否是第一次处理该页。
    创建或重新创建动态控件。
    动态设置主控页。
    动态设置 Theme 属性。
    读取或设置配置文件属性值。
    注意:如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一阶段被改写。
    Page_Init 读取或初始化控件属性。
    Page_Load 读取和更新控件属性。
    Control events 执行特定于应用程序的处理:
    如果页包含验证程序控件,请在执行任何处理之前检查页和各个验证控件的 IsValid 属性。
    处理特定事件,如 Button 控件的 Click 事件。
    Page_PreRender 对页的内容进行最后更改。
    Page_Unload 执行最后的清理工作,可能包括:
    关闭打开的文件和数据库连接。
    完成日志记录或其他特定于请求的任务。
    需要注意的是,每个asp.net控件也有与asp.net类似的生命周期,如果aspx页面中包含有asp.net服务器控件,那么在调用页面的方法时也会调用控件的相关方法。

    另外,Web应用程序是无状态的。每次请求一个新网页或者刷新页面服务器都会创建一个当前页的新实例,这就意味着无法获取页面的以前的信息,如果确实需要这么做,需要采用额外的机制。
    我们将刚才新建的Index.aspx页面中添加代码,如下:

    1. <%@ Page Language="C#" %>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <script runat="server">
    4.     string date;
    5.     protected void Page_Load(object sender, EventArgs e)
    6.     {
    7.         if (date == null)//如果date为空则设置为当前时间的字符串形式
    8.         {
    9.             date = DateTime.Now.ToString();
    10.         }
    11.         Response.Write("当前时间:"+date);
    12.     }
    13. </script>
    14. <html xmlns="http://www.w3.org/1999/xhtml" >
    15. <head runat="server">
    16.     <title>无标题页</title>
    17. </head>
    18. <body>
    19.     <form id="form1" runat="server">
    20.     <div>
    21.     
    22.     </div>
    23.     </form>
    24. </body>
    25. </html>

    按照正常理解,第一次运行的时候date字符串为null,会被设置成系统当前的字符串表示形式,并且输出,再次刷新的时候date字符串不再为空,会依然输出刚才的时间字符串,但是结果却不是这样。第一次运行的结果:
     
    刷新页面之后的结果:
     
    这就证明了即使是刷新当前页也会重新生成一个当前页面的实例,因为只有在生成页面新实例的情况下date字符串变量才为空,才会被重新设置值。

     

    IsPostBack属性
    Page类有一个IsPostBack属性,这个属性用来指示当前页面是第一次加载还是响应了页面上某个控件的服务器事件导致回发而加载。
    这次我们继续对Index.aspx页面添加代码,在页面中增加了一个Button控件,如下:

    1. <%@ Page Language="C#" %>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <script runat="server">
    4.     string date;
    5.     protected void Page_Load(object sender, EventArgs e)
    6.     {
    7.         if (date == null)//如果date为空则设置为当前时间的字符串形式
    8.         {
    9.             date = DateTime.Now.ToString();
    10.         }
    11.         Response.Write("当前时间:"+date);
    12.         if (!Page.IsPostBack)
    13.         {
    14.             Response.Write("第一次加载。");
    15.         }
    16.         else
    17.         {
    18.             Response.Write("响应客户端回发而加载。");
    19.         }
    20.     }
    21.     protected void btnOK_Click(object sender, EventArgs e)
    22.     {
    23.     }
    24. </script>
    25. <html xmlns="http://www.w3.org/1999/xhtml" >
    26. <head runat="server">
    27.     <title>无标题页</title>
    28. </head>
    29. <body>
    30.     <form id="form1" runat="server">
    31.     <div>
    32.         <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="提交" /></div>
    33.     </form>
    34. </body>
    35. </html>

    页面第一次运行的结果:
     
    按一下F5刷新页面的结果:
     
    点击一下“提交”按钮之后的结果:
     
    由此可见每次打开一个页面和刷新一个页面效果都是一样的,只有响应客户端回发时IsPostBack属性才是true。了解这个属性和服务器采用了一种机制来“记录”服务器控件的状态这种做法(其实利用了ViewState和ControlState机制,这部分后续文章中会讲到)对于将来数据绑定会有很大作用。

     

    动态输出javascript脚本
    对于Index.aspx页面上面的执行情况,我们看到了满意的结果。我们再来看一下这个页面在客户端生成的HTML代码,在浏览器窗口打开的页面点鼠标右键,然后选择“查看源文件”,HTML代码如下:

    1. 当前时间:2008-9-21 0:04:33响应客户端回发而加载。
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml" >
    4. <head><title>
    5.  无标题页
    6. </title></head>
    7. <body>
    8.     <form name="form1" method="post" action="Index.aspx" id="form1">
    9. <div>
    10. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY3NzE5MjIyMGRkD2VvJFADDdEHh4W9UfAyzIvI3ss=" />
    11. </div>
    12.     <div>
    13.         <input type="submit" name="btnOK" value="提交" id="btnOK" /></div>
    14.     
    15. <div>
    16.  <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgL8vZamCQLdkpmPAeM33vfm1ARVNKdKAoq5+eQdFI1J" />
    17. </div></form>
    18. </body>
    19. </html>

    我们会看到“当前时间:2008-9-21 0:04:33响应客户端回发而加载。”这句话位于<html></html>标记之外。在第一夜时候就提到过,asp.net页面是满足XML标准的HTML语言,但是通过在Page_Load事件中利用Response属性会将文字输出在<html></html>标记之外,不符合XHTML标准。这对于普通页面来说也许并无大碍,但是如果在频繁输出javascript脚本的网页中,可能会对网页的客户端执行效果产生影响。因为javascript脚本块在客户端调用方法之前还是客户端调用方法之后效果可能会不一样。
    下面在Home窗体的Page_Load事件中添加代码,如下:


     

    1. using System;
    2. using System.Data;
    3. using System.Configuration;
    4. using System.Collections;
    5. using System.Web;
    6. using System.Web.Security;
    7. using System.Web.UI;
    8. using System.Web.UI.WebControls;
    9. using System.Web.UI.WebControls.WebParts;
    10. using System.Web.UI.HtmlControls;
    11. public partial class Home : System.Web.UI.Page
    12. {
    13.     protected void Page_Load(object sender, EventArgs e)
    14.     {
    15.         if (!Page.IsPostBack)
    16.         {
    17.             Response.Write("<script language='javascript'>alert('" + DateTime.Now.ToString() + "')</script>");
    18.         }
    19.     }
    20. }

    这样每次运行Home.aspx页面的时候都会弹出一个对话框,如下图:
     
    这不是我们所关心的,我们关注的是生成的HTML代码,如下:

    1. <script language='javascript'>alert('2008-9-21 0:22:52')</script>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml" >
    4. <head><title>
    5.  无标题页
    6. </title></head>
    7. <body>
    8.     <form name="form1" method="post" action="Home.aspx" id="form1">
    9. <div>
    10. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw==" />
    11. </div>
    12.     <div>
    13.     
    14.     </div>
    15.     </form>
    16. </body>
    17. </html>

    可以看见输出的javascript代码在<html></html>标记之外。
    在Page类中有一个ClientScript属性,它是ClientScriptManager的实例,这个类是在asp.net2.0中新增的。ClientScriptManager有如下几个常用方法:
    RegisterClientScriptBlock方法:向 Page 对象注册客户端脚本。
    RegisterStartupScript方法:向 Page 对象注册启动脚本。
    ClientScriptManager类通过键string和Type来唯一标识脚本。具有相同类型的键和Type的脚本识为同一脚本。
    下面对Home窗体的Page_Load事件中输入如下代码:


     

    1. using System;
    2. using System.Data;
    3. using System.Configuration;
    4. using System.Collections;
    5. using System.Web;
    6. using System.Web.Security;
    7. using System.Web.UI;
    8. using System.Web.UI.WebControls;
    9. using System.Web.UI.WebControls.WebParts;
    10. using System.Web.UI.HtmlControls;
    11. public partial class Home : System.Web.UI.Page
    12. {
    13.     protected void Page_Load(object sender, EventArgs e)
    14.     {
    15.         if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "ClientScriptBlock"))
    16.         {
    17.             ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientScriptBlock""<script language='javascript'>alert('ClientScriptBlock')</script>");
    18.         }
    19.         if (!ClientScript.IsStartupScriptRegistered(this.GetType(), "StartupScript"))
    20.         {
    21.             ClientScript.RegisterStartupScript(this.GetType(), "StartupScript""<script language='javascript'>alert('StartupScript')</script>");
    22.         }
    23.         //Response.Write("<script language='javascript'>alert('" + DateTime.Now.ToString() + "')</script>");
    24.     }
    25. }

    执行该页面时,会弹出两个提示窗口,生成的HTML代码如下:

     

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" >
    3. <head><title>
    4.  无标题页
    5. </title></head>
    6. <body>
    7.     <form name="form1" method="post" action="Home.aspx" id="form1">
    8. <div>
    9. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw==" />
    10. </div>
    11. <script language='javascript'>alert('ClientScriptBlock')</script>
    12.     <div>
    13.          </div>
    14.     
    15. <script language='javascript'>alert('StartupScript')</script></form>
    16. </body>
    17. </html>

    可以看出上面的两个方法输出的javascript脚本都在<form></form>标记之内,不会破环文章的结构,而且RegisterClientScriptBlock方法输出的javascript脚本代码块靠近<form>标记的开始标记,而RegisterStartupScript方法输出的javascript脚本代码块靠近<form>标记的结束标记,了解这一点对于控制动态添加的客户端脚本的时间是非常有利的。

     

    回调技术(CallBack)
    在asp.net中客户端与服务器端的交互默认都是整页面提交,此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个页面的内容重新发送到客户端,这种处理方式对运行结果没什么影响,不过这种方式加重了网络的数据传输负担、加大了服务器的工作压力,并且用户还需要等待最终处理结果。假如是我们希望有这么一个功能,当用户填写完用户名之后就检查服务器数据库里是否已存在该用户名,如果存在就给出已经存在此用户名的提示,如果不存在就提示用户此用户名可用,对于这种情况其实只需要传递一个用户名作为参数即可,上面的做法却需要提交整个表单,有点小题大做。解决上面的问题的办法目前主流做法有三种:纯javascript实现、微软Ajax类库实现还有用AjaxPro实现。后两种做法在稍后的文章中会讲到,这里我讲另外一种实现:通过回调技术。


    创建实现回调技术的网页与普通asp.net网页类似,只不过还需要做以下特殊工作:
    (1)让当前页面实现ICallbackEventHandler接口,这个接口定义了两个方法:string GetCallbackResult ()方法和void RaiseCallbackEvent (string eventArgument)方法。其中GetCallbackResult ()方法的作用是返回以控件为目标的回调事件的结果,RaiseCallbackEvent()方法的作用是处理以控件为目标的回调事件。
    (2)为当前页提供三个javascript客户端脚本函数。一个javascript函数用于执行对服务器的实际请求,在这个函数中可以提供一个字符串类型的参数发送到服务器端;另一个javascript函数用于接收服务器端方法的执行后返回的字符串类型结果,并处理这个结果;还有一个是执行对服务器请求的帮助函数,在服务器代码中通过GetCallbackEventReference()方法获取这个方法的引用时由asp.net自动生成这个函数。
    下面我以一个详细的例子来讲述如何使用回调,用Dreamweaver创建一个Register. aspx页面,代码如下:


     

    1. <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
    2. <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
    3. <%@ Import Namespace="System.Text" %>
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    5. <html xmlns="http://www.w3.org/1999/xhtml">
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    8. <title>用户注册</title>
    9. <script language="javascript">
    10. //客户端执行的方法
    11. //下面的方法是接收并处理服务器方法执行的返回结果
    12. function Success(args, context)
    13. {
    14.     message.innerText  = args;
    15. }
    16. //下面的方式是当接收服务器方法处理的结果发生异常时调用的方法
    17. function Error(args, context)
    18. {
    19.     message.innerText  = '发生了异常';
    20. }
    21. </script>
    22. <script language="c#" runat="server">
    23. string result="";
    24. // 定义在服务器端运行的回调方法.
    25. public void RaiseCallbackEvent(String eventArgument)
    26. {
    27.  if(eventArgument.ToLower().IndexOf("admin")!=-1)
    28.  {
    29.   result=eventArgument+"不能作为用户名注册。";
    30.  }
    31.  else
    32.  {
    33.   result=eventArgument+"可以注册。";
    34.  }
    35.  //throw new Exception();
    36. }
    37. //定义返回回调方法执行结果的方法
    38. public string GetCallbackResult()
    39. {
    40.  return result;
    41. }
    42. //服务器上执行的方法
    43. public void Page_Load(Object sender,EventArgs e)
    44. {
    45.  // 获取当前页的ClientScriptManager的引用
    46.     ClientScriptManager csm = Page.ClientScript;
    47.  // 获取回调引用。会在客户端生成WebForm_DoCallback方法,调用它来达到异步调用。这个方式是微软写的方法,会被发送到客户端
    48.  //注意这里的"Success"和"Error"两个字符串分别客户端代码中定义的两个javascript函数
    49.  //下面的方法最后一个参数的意义:true表示执行异步回调,false表示执行同步回调
    50.  String reference = csm.GetCallbackEventReference(this, "args","Success","","Error",false);
    51.  String callbackScript = "function CallServerMethod(args, context) {/n" + 
    52.   reference + ";/n }";
    53.  // 向当前页面注册javascript脚本代码
    54.  csm.RegisterClientScriptBlock(this.GetType(), "CallServerMethod", 
    55.   callbackScript, true);
    56. }
    57. </script>
    58. </head>
    59. <body>
    60. <form id="form1" runat="server">
    61. <table border="1" cellpadding="0" cellspacing="0" width="400px">
    62. <tr>
    63. <td width="100px">用户名</td><td><input type="text" size="10" maxlength="20" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" /><span id="message"></span></td>
    64. </tr>
    65. <tr>
    66. <td>密码</td><td><input type="password" size="10" maxlength="20" id="txtPwd" /></td>
    67. </tr>
    68. </table>
    69. </form>
    70. </body>
    71. </html>

    上面的页面中我已经添加了足够详尽的注视,不过我还是要说明几点:
    (1)

    1. <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>

    这句表示当前页面实现了ICallbackEventHandler接口,如果采用页面与代码分离的模式,后台cs代码则应是:

    1. public partial class Register : System.Web.UI.Page, ICallbackEventHandler
    2. {
    3. //cs代码
    4. }

    (2)

    1. <input type="text" size="10" maxlength="20" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" />

    这里有一个οnblur="CallServerMethod(txtUserName.value,null),表示当用户名文本框失去焦点之后激发CallServerMethod这个客户端方法,这个客户端方法是由asp.net动态生成的。
    (3)

    1. csm.GetCallbackEventReference(this"args","Success","","Error",false);

    中的"Success"和"Error"分别代表客户端的javascript函数,可以在代码中见到,其中"Success"代表调用服务器端方法成功后要执行的客户端方法名,"Error"代表调用服务器端方法失败时调用的客户端方法名。

    该页面在客户端生成的HTML代码如下:


     

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    5. <title>用户注册</title>
    6. <script language="javascript">
    7. //客户端执行的方法
    8. //下面的方法是接收并处理服务器方法执行的返回结果
    9. function Success(args, context)
    10. {
    11.     message.innerText  = args;
    12. }
    13. //下面的方式是当接收服务器方法处理的结果发生异常时调用的方法
    14. function Error(args, context)
    15. {
    16.     message.innerText  = '发生了异常';
    17. }
    18. </script>
    19. </head>
    20. <body>
    21. <form name="form1" method="post" action="register.aspx" id="form1">
    22. <div>
    23. <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    24. <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    25. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMjA0MjMxNTU1OGRkIv6UMIqGy3vfPLfPRjEbuTwUrf8=" />
    26. </div>
    27. <script type="text/javascript">
    28. <!--
    29. var theForm = document.forms['form1'];
    30. if (!theForm) {
    31.     theForm = document.form1;
    32. }
    33. function __doPostBack(eventTarget, eventArgument) {
    34.     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    35.         theForm.__EVENTTARGET.value = eventTarget;
    36.         theForm.__EVENTARGUMENT.value = eventArgument;
    37.         theForm.submit();
    38.     }
    39. }
    40. // -->
    41. </script>
    42. <script src="/WebResource.axd?d=CcZ-_AaHZnD65xnNHEUijg2&t=633578466781093750" type="text/javascript"></script>
    43. <script type="text/javascript">
    44. <!--
    45. function CallServerMethod(args, context) {
    46. WebForm_DoCallback('__Page',args,Success,"",Error,false);
    47.  }// -->
    48. </script>
    49. <table border="1" cellpadding="0" cellspacing="0" width="400px">
    50. <tr>
    51. <td width="100px">用户名</td><td><input type="text" size="10" maxlength="20" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" /><span id="message"></span></td>
    52. </tr>
    53. <tr>
    54. <td>密码</td><td><input type="password" size="10" maxlength="20" id="txtPwd" /></td>
    55. </tr>
    56. </table>
    57. <script type="text/javascript">
    58. <!--
    59. WebForm_InitCallback();// -->
    60. </script>
    61. </form>
    62. </body>
    63. </html>

    在生成的HTML代码中多了几段javascipt教本块,下面分别说明:
    (1)第一部分

    1. <script type="text/javascript">
    2. <!--
    3. var theForm = document.forms['form1'];
    4. if (!theForm) {
    5.     theForm = document.form1;
    6. }
    7. function __doPostBack(eventTarget, eventArgument) {
    8.     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    9.         theForm.__EVENTTARGET.value = eventTarget;
    10.         theForm.__EVENTARGUMENT.value = eventArgument;
    11.         theForm.submit();
    12.     }
    13. }
    14. // -->
    15. </script>

    这部分代码是每个asp.net页面发送到客户端都会生成的,用于提交当前表单,其中eventTarget参数表示激发提交事件的控件,eventArgument参数表示发生该事件时的参数信息。

    (2)第二部分

    1. <script src="/WebResource.axd?d=CcZ-_AaHZnD65xnNHEUijg2&t=633578466781093750" type="text/javascript"></script>

    这部分代码是用来生成一些用于Ajax调用的js脚本。说穿了,asp.net之所以开发起来方便,是因为微软在幕后默默地为我们做了很多工作,回调的本质其实就是Ajax调用。
    我们可以将“/WebResource.axd?d=CcZ-_AaHZnD65xnNHEUijg2&amp;t=633578466781093750”这部分拷贝到浏览器地址栏中,如下图:
     
    回车之后会弹出一个下载文件对话框,如下图:
     
    将这个页面保存到本地,虽然默认的保存文件的后缀为“.axd”,但它其实是一个文本文件,里面是一些javascript代码,我们可以用记事本打开,在里面我们可以看到“WebForm_DoCallback”这个方法,如下:
     
    在这个axd文件里做了很多幕后工作,所以我们的回调才相对比较简单。

    (3)第三部分

    1. <script type="text/javascript">
    2. <!--
    3. function CallServerMethod(args, context) {
    4. WebForm_DoCallback('__Page',args,Success,"",Error,false);
    5.  }// -->
    6. </script>

    这部分代码是后台生成的,通过获取Page类的ClientScript属性,也就是ClientScriptManager的实例注册到页面的,里面定义了两个javascript函数:CallServerMethod函数和WebForm_DoCallback函数,并且是在CallServerMethod函数中调用WebForm_DoCallback函数。

    (4)第四部分

    1. <script type="text/javascript">
    2. <!--
    3. WebForm_InitCallback();// -->
    4. </script>

    这部分代码也是幕后生成的,这个javascript函数也可以在那个axd文件中找到。如下图:
     

    当我们在以除“admin”之外的字符串作为用户名并移开焦点之后,会得到可以注册的提示,如下图:
     
    当我们输入“admin”作为用户名时的结果:
     
    另外,我们将服务器端执行的方法做如下处理,也就是RaiseCallbackEvent(String eventArgument)这个方法,我们在这里抛出一个异常,代码如下:

    1. // 定义在服务器端运行的回调方法.
    2. public void RaiseCallbackEvent(String eventArgument)
    3. {
    4.  /*
    5.  if(eventArgument.ToLower().IndexOf("admin")!=-1)
    6.  {
    7.   result=eventArgument+"不能作为用户名注册。";
    8.  }
    9.  else
    10.  {
    11.   result=eventArgument+"可以注册。";
    12.  }
    13.  */
    14.  throw new Exception();
    15. }

    再次运行,无论我们以什么作为用户名,都会得到如下结果:
     
    之所以会出现“发生了异常”这个字符串,是因为我们定义了function Error(args, context)这个javascript函数,并且把它作为调用服务器端方法发生异常时的客户端处理函数,它的处理方式就是显示“发生了异常”这个字符串。

     

    后记:看到很多朋友在http://blog.csdn.net/zhoufoxcn上留言,急切想看到后续文章,所以不顾白天工作繁忙继续写了这一篇文章,在这篇文章里花了较大篇幅介绍回调技术,怕初学者理解起来有困难,所以我在代码中用了大量注释,并额外解释了一些关键代码,希望大家能够理解。下一篇将介绍asp.net基本服务器控件。
    写完这篇文章已经是2008-9-26 日凌晨了,我发现这个系列的文章该叫《asp.net晨话》而不是叫《asp.net夜话》了,因为每次我写完的时候都已经是凌晨了,呵呵。不过有这么多朋友热情的留言鼓励,我的动力还是很大的。下一篇我已经基本完成了,不过需要我抽空再做一下文字校正工作。工作比较忙,时间特别不充足,希望大家多多谅解:)
    另外,如果大家有什么好的建议请到我的博客
    http://blog.csdn.net/zhoufoxcn留言,我会经常留意大家的留言的。
    周金桥 2008-9-28 0点50分

     

     注意,因为个人空间大小和下载速度受限,所以以后不再提供从本人主机上的下载地址,可以到www.verycd.com下载《ASP.NET夜话》的测试版视频教程。地址是:http://www.verycd.com/topics/2730883/

     

     

    Asp.net夜话系列文章:

     

    展开全文
  • 软件测试功能测试点总结

    千次阅读 多人点赞 2018-08-09 20:37:36
    每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以...
  • WEB功能测试方法

    千次阅读 2016-01-25 10:53:21
    1、页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;...
  • .NET Core 是.NET Framework的新一代跨平台应用程序开发框架,是微软在一开始发展时开源的软件平台,ASP.NET Core 以控制台应用程序驱动其托管环境 Kestrel Server 以支持 ASP.NET Core 程序的运行。
  • 前台是这个样子的,放了一个textbox和button,但是我的后台并没有写任何东西(一句代码都没写),为什么用浏览器访问的时候,填好了textbox之后,随手一下回车页面就刷新,求解??新手不懂 <%@ ...
  • 用户录入关键字后点击回车会调用查询方法根据关键字查询,原先功能没有问题,但是最近发现在查询输入框中回车会直接刷新页面不调用查询方法。检查发现有人在查询模块新增了一个form表单,找了很多和form表单相关...
  • 大年三十整理的asp.net资料!(不得不收藏)

    万次阅读 热门讨论 2007-02-26 09:30:00
    大年三十整理的asp.net资料!(不得不收藏) 使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0
  • http://blog.csdn.net/mengyao/archive/2007/02/17/1511356.aspx使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件...
  • ASP.NET HTTP协议和ASP.NET

    千次阅读 2019-04-24 23:25:09
    1 ASP.NET HTTP协议 1.1 什么是HTTP协议 HTTP(Hyper Text Transfer Protocol):超文本传输协议,Http协议就是将超文本标记语言的文档(即Html文档)从web服务传送到客户端的浏览器。 ... ...1.1.1 ...
  • 黑盒测试框架学习笔记

    千次阅读 2016-07-20 15:49:17
    各种测试之间是有相通的地方的 一、功能测试测试点 功能测试就是对产品的各功能进行验证,...1)每一个链接都有对应的页面,并且页面之间切换正确。 页面链接检查时可以使用一些工具,比如如LinkBotPro、File-AIDC
  • 功能测试就是对产品的各功能进行...1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不
  • Web测试点

    千次阅读 2016-07-26 11:45:56
    一、输入框 1、字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。...
  • 功能测试41个点

    千次阅读 2018-07-10 16:42:57
    &gt;验证,根据功能测试用例,逐项测试...页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支...
  • asp.net资料

    千次阅读 2007-03-06 09:40:00
    使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 图片滚动代码。 css——之三行三列等高布局 Datagird ...
  • asp.net速查手册呵呵

    千次阅读 2006-07-23 20:58:00
    GridView/DataGrid单元格不换行的问题 如何在GridView中使用DataFromatString VS2005新控件之GridView 使用高级技巧系列[一][视频] VS2005新控件之GridView 使用高级技巧 几个.Net开源的CMS、Portal系统 gridview...
1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

webform按回车就自动刷新页面