跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Web窗体开发

Web 窗体开发 写在前面的话 , 这次给大家说说关于 Web 窗体的开发 , 个人感觉这次的内容还是蛮重要的 , 但是看看书却发现这一届大部分内容都是拖控件 . 唉 , 感觉拖控件不好 . 咱们不拖控件 ! 问题一 : 简述页面跳转的几种方法 参考 : 一想到页面跳转 , 可能最先想到的是应该是超链接 , 就是在 HTML 页面使用如下代码 :

这是一个超链接

一般学习过 JavaScript 的同学可能会说使用 JS 也能实现页面跳转 , 对于你们这些同学 , 我会说 , 你真棒 !

既然是学习 .NET, 肯定有 .NET的方法,看下面 1.使用Response对象的Redirect方法实现页面跳转

Response.Redirect("Target.aspx");

2.使用Server对象的Transfer方法:

Server.Transfer("Target.aspx");

3.使用Server对象的Execute方法:

Server.Execute("Target.aspx");

注意:执行Server.Transfer或Server.Execute方法进行页面跳转后,浏览器的地址栏仍然显示原来的网页. 关于这些方法的详细信息咱们以后在详细说 . 这里先知道能使用这些方法跳转页面也好了 . 题目二 : 如何在关闭子窗口时刷新父窗口 参考 : 这个问题嘛 , 小儿科 , 但是很常用 , 相信我 ! 而且你生活中常用到 . 使用子窗口的 opener 属性获得打开当前窗口的父窗口 , 调用 opener.location.reload 方法刷新父窗口 . 首先 , 使用 window 对象的 opne 方法打开一个子窗口 :

然后 , 在子窗口中单击”保存”按钮时调用opener.location.reload方法刷新父窗口;调用window.close方法关闭子窗口, 代码如下 :

http://zhidao.baidu.com/link?url=RpcJxmIS8lKz7Qi9bpp5-SquD248vo9aK03qPTGPS-GeBSrshCc_Pn3HGZAfjVGxrKK9OUJfXpNcQYUgSCY6uK 题目三 : 如何实现 JavaScript 和 C# 互相调用和访问 参考 : 这个问题经常用到 , 因为在编写代码的时候 ,C# 代码放在一个页面 ,JS 代码在另一个页面 , 但是 C# 代码中的变量需要被 JS 访问 , 或者是互相访问 , 我反正用的次数挺多 . 先介绍 JS 访问 C# 的两种方法 : 1.在HTML页面中使用<%=%>标记,访问格式是<%=C#变量名%>. C# 代码

public string Str = "C# variable";

public string GetStr(string str) { return str + Str; } 使用 JS 脚本访问 C# 变量和方法 :

2.另一种方法是在控件模版中使用<%#%>标记,访问格式是<%#Eval(“表达式名”)%>. 这个方法不说了 , 拖控件 , 看见就烦 ! 介绍一下C#和JS想互访问的方法,也是最常用的的互访方式:使用隐藏域Hidden.声明隐藏字段时一定要加上runat=”server”,只有这样隐藏域字段才能被C#代码访问到 .

使用 JS 访问 :

function SetHidden()

{ document.getElementById("Hidden1").value = "JS set value"; } 使用 C# 访问 :

protected void btnCallJavaScript(object sender, EventArgs e)

{ Response.Write(Hidden1.Value); } 注意:必须将隐藏字段Hidden放在

元素中,并且加上runat=”server”,C#代码才能访问到. 总结一下 : 变量互访很重要 , 貌似这句话说了好几遍了 ,JS 访问 C# 时主要涉及两种方法 : 在 HTML 中使用

<%=%>

标记 , 额 ... 平常的话 , 使用这个就够了 . 还有一种是在控件模版中使用

<%#%>

标记 , 访问格式 :<%#Eval( “表达式名”)%>.C# 和 JS 相互都能访问的方法只有一个 , 使用隐藏字段 Hidden. 问题四 : 什么是 HTTP 模块 参考 : 网站的开发往往有很多的功能是相似的,比如Form身份验证,缓存,会话状态,客户端脚本服务等.这些东西都可以使用HTTP模块实现. 要实现 HTTP 模块也很简单 , 需要定义一个实现 IHttpModule 接口的类 , 并实现该接口的全部方法 , 其次要在 web.config 文件中的

标记之间注册该类 . 具体的一切 , 咱们以后说 , 相信我 , 你暂时脑袋里有这么一个印象 , 咱们日后再谈 ! 题目五 : 在 ASP.NET 中如何自定义 HTTP 处理程序 参考 : 什么叫 HTTP 处理程序呢 ? 自定义 ? 看来有系统定义实现的 ! 而且大部分时候都是用系统定义实现的 . 当你访问扩展名是 .aspx 的文件时 , 通过页面处理程序处理请求 ; 访问扩展名是 .asmx 的文件时 , 通过 Web 服务器处理程序处理请求 . 这些都是 ASP.NET 内置的处理程序 . 开发人员可以自定义 HTTP 处理程序 . 要实现自定义 HTTP 处理请求 , 需要定义一个实现 IHttpHandler 接口的类 , 并实现该类的全部方法 , 其次要在 web.config 文件中

标记之间注册该类 . 题目六 : 在 ASP.NET 中如何对变量做持久化处理 参考 : 持久这个词应该没人不懂吧 , 因为 ASP.NET 页面是无状态的 , 所谓的无状态就是说服务器不会记录已处理的页面信息 , 如果应用程序需要维护页面中的信息 , 无状态的性质就成为一个问题 . 例如 , 在页面代码文件中定义一个变量 , 并给变量赋上初值 . 单击提交按钮后变量的值丢失了 . 如何解决这个问题呢 ? 使用 ViewState对变量做持久化处理可以解决在回传过程中变量值丢失的问题. 前台代码 :

后台代码 :

private string Var;

private string PersistenceVar { get { if (ViewState["PersistenceVar"]==null) { return ""; } return ViewState["PersistenceVar"].ToString(); } set { ViewState["PersistenceVar"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { Var = "为经过持久化处理的变量"; PersistenceVar = "这时经过持久化处理的变量"; } Response.Write("Var: "+Var+"
"); Response.Write("PersistenceVar: " + PersistenceVar); }
额 ... 说实话 , 本来想做一个关于持久化的自增案例的 , 结果想了半天不会 , 如果你会的话 , 请给我留言 , 谢谢 ! 总结 : 单击提交按钮之后 , 持久化的值还在 , 但未经持久化的值却丢失了 . 问题七 : 如何使用 Request 对象获取地址栏参数 参考 : 这也是一个重要的点 ,Request 对象用于检索从浏览器向服务器发送的请求中的信息 . 他提供对当前页面请求的访问 , 包括标题 ,Cookie, 客户端整数 , 查询字符串等等 . 使用 Request 对象的 QueryString 属性可以获取地址栏中传递的参数 . 前台代码 :

后台代码

protected void Page_Load(object sender, EventArgs e)

{ string name = Request["txtName"]; }

但是 , 有一点需要说明 , 通过地址栏传参的时候,参数都暴漏了,这个时候需要给地址栏参数加密 ! 以后有机会再说 ! 问题八 : 在 ASP.NET 中如何输出二进制图像 参考 : 问题依旧重要 , 例如在开发图形验证码的时候 ,12306 的验证码都用过吧 , 首先生成验证码 , 然后绘制图像 , 最后通过该方法输出到页面上 . 所以 , 还要有必要说一下这个方法的 . 主要用到的是 Response 对象的 BinaryWrite 方法 , 该方法的作用是将一个二进制字符串写入到 HTTp 输出流 .

public void BinaryWrite(byte [] buffer)

//参数buffer是要写入输出流的字节. 使用这个方法可以将存储在内存流中的二进制图像输出到页面中 . 题目九 : 如何解决 Session 值丢失的问题 参考 :Session 这个玩意依然重要 , 你可能会说 , 这一次怎么全是重要的东西 ? 我会说 , 这些东西全是楼主在实际中常用到的东西 , 几乎每个项目都会用大这次内容的大部分 . 在使用 Session 保存数据时 ,有时 可能会因为改写 bin 目录下的某个文件或其他原因引起 Session 中的数据丢失 . 由于在 web.config 文件中 Session 的配置中 mode 属性是用来设置 Session 保存状态的 . 而默认的参数为 Inproc, 该参数使 Session 的保存状态依赖于 ASP.NET 进程 . 这个进程不稳定 , 在某些事情发生时 , 可能会引起进程的重启 , 而该进程重启后会导致 Session 的丢失 . 为防止Session的丢失,可以把mode属性的参数设置为StateServer.StateServer是本机中的一个服务,而该服务除非是电脑重启或StateService崩溃的时候Session才会丢失.设置方法如下: 1.在web.config文件中设置sessionState中的mode参数为StateServer.补充一下,sessionState这个标记在标记下(http://blog.csdn.net/nihongyuan/article/details/4139928). 2.“控制面板”->”管理工具”->”服务”选项->找到”ASP.NET状态服务”,启动. 总结一下 : 额 .. 一般碰见重要的内容我才总结 ! 相信哥 , 如果不重要你砍我 . 为了防止 Session 值丢失 , 可以设置 Session 对象的保存位置 . 最常用的分别是保存在服务器端和数据库中 , 这样可以很好地防止 Session 值的丢失 . 问题十 : 如何解决传递汉字丢失或乱码的问题 参考 : 大家只要上网就应该知道看到过乱码问题 , 乱码问题对于汉字尤其烦人 , 那么在我们设计的时候也要避免的乱码问题 , 主要涉及到的对象是 Server 对象的 UrlEncode 方法和 UrlDecode 方法 , 看名字就知道是一个用来编码和解码 , 啥 ? 哪个对应哪个 ? 自己猜去吧 !

Server.UrlEncode(string); //string为需要进行编码的数据

Server.UrlDecode(string);//string为需要进行解码的文本字符串 为了确保传递的汉字可以被正确的接受,可以在传值之前使用Server对象的UrlEncode方法对所传递的汉字进行URL编码.接受值时,使用Server对象UrlDecode方法对所接受的汉字进行URL解码. 问题十一 : 谈谈你对 Session 对象的理解 参考 : 这种谈个人理解题目最不好弄 , 也最好弄 , 为啥 , 没有正确答案 , 随便说说就好 , 但是不能说的太随便了啊 , 你也不能乱说 , 每个客户端连接姐服务器后,服务器端都要建立一个独立的Session,并且需要分配额外的资源管理这个Session.但如果客户端由于某些原因,例如,去忙其他工作停止了任务动作,但没有关闭浏览器,那么这种情况下,服务器依然会消耗一定得资源来管理Session,这就造成了对服务器的浪费,降低了服务器效率,所以可以通过设置Session对象的生存期以减少这种对服务器的浪费. 如果你去银行办理业务,你正在办理业务,这个时候来了一个电话,是你客户给你打的,是个好几亿的项目,这个时候你可能会让服务员等等,你出去接个电话,这个时候服务员因为你走了,人家没法服务别人,但是你告诉服务员说让她等一会,人家服务员这个时候出于人性会等你几分钟,但是不能无限制的等你,对吧.这是这个道理. 一般情况下 , 在应用程序开发过程中 , 要更改 Session 对象的有效期限 , 只要设定 TimeOut 属性即可 . 这个值的默认值是 20 分钟 . 也就是说你有 20 分钟和你客户打电话 , 超过 20 分钟服务员就服务别人了 . 说明 : 在 web.config 文件中 , 使用 sessionState 配置元素的 timeout 属性来设置 Timeout 属性 , 也可以使用程序代码直接设置 Timeout 属性值 , 这个值不能超过 1 年 . 使用Session对象一般用来存储用户登录名,以及通过Session对象判断登录状态. 问题十二 : 简述 ASP.NET 中如何获取网站路径 参考 : 这个问题嘛 , 很重要 , 我常用 . 而且老好用了 . 在访问网站时 , 一般是通过相对路径来访问 Web 页面或文件的 , 在 ASP.NET 中使用 Server 对象 MapPath() 方法可以获取服务器端的物理地址 . MapPath()方法用来返回与Web服务器上的指定虚拟路径相对应的物理文件路径:

Server.MapPath(path);

path标识Web服务器上的虚拟路径.如果path值为空,则该方法返回包含当前应用程序的完整物理路径. 空口无凭 ! 看案例 :

Response.Write(Server.MapPath("test.aspx"));

输出结果为文件的全路径,也就是所谓的物理路径.也可以输出网站指定目录的物理路径. 可以使用Server.MapPath(“.”)获取当前目录所在服务器端的物理路径. 问题十三 : 谈谈你对隐藏域的理解 参考 : 首先你得明白为啥要使用隐藏域 , 你还记得咱们说过 Web 页面是一种无状态的吗 ? 第一次的时候就是说的使用 ViewState 关键字来保存状态 , 接着咱们现在要说的这个是隐藏域 , 前面刚刚说过 Session 貌似还能存储用户的登录名和判断登录状态对吧 ? 隐藏域也是一种状态保存的技术, 虽然有个 HiddenField 控件来实现 , 但是楼主不建议使用控件 . 还是老老实实的手写吧 . 问题十四 : 还有大部分的内容都是拖控件或者是了解控件的详细信息 . 这里楼主就不多说了 , 我把那些重要控件列出来 , 大家稍微知道就好了 , 还是那句话 , 楼主不支持拖控件 , 你就当没有控件这回事就好了 ! 使用 TreeView 控件和 SiteMapDataSource 控件可以实现站点导航功能 . 在 ASP.NET 中如何给控件添加不存在的属性 . FIleUpload 控件上传文件时如何控制文件类型 . 在 GridView 控件中如何解决标题过长的问题以及该控件如何强制换行 .GirdView 控件如何执行客户端脚本 . 如何实现自动编号功能 .

相关文章