本章简言

上一章中笔者讲到关于Linq和EF的用法。并以hibernate来进行讲解。那么本章笔者来讲一下C#的Asp.Net。即是在B/S模式下开发。现在企业大部分的业务都是面向B/S模式的。所以对于Asp.Net的了解变得必不可少的知识点。笔者在从事JAVA开发的时候,很少看到有关于Awt和Swing开发的企业。更多是Servlet和JSP开发。这也是没有办法的事情。因为用Awt和Swing来开发软件不是说不能。只是怕吃力不讨好。笔者不是说JAVA不好。有一些方面JAVA的确存在不适合的情况。那么Asp.Net大家可以理解为JAVA的Web开发。关于HTML和CSS,JS俩都是一样子。这个不用当心。好了。进入本章的内部吧。

Web 窗体

我们都知道J2EE在开发的过程中一定离不开Tomcat,JBoss等服务器。笔者比较善长用Tomcat,主要是因为他轻量。那么Asp.NET呢?他是的服务器又是什么呢?如果只是开发的话。读者们不要当心visual studio里面有一个自带IIS。没有错。Asp.NET的服务器就叫IIS。现在就让我们新建一个Asp.NET项目吧。

关于新建项目现在大家都知道了。这里要知道一点那就是不要忘了选择Web下面的Visual Studio 2012。当然选择Web也是可以的。只是选项没有那么多。笔者这里只有俩个。好了,笔者想要新建一个空的Asp.NET来看看。

好简单。一个空的Asp.NET就建好了。现在我们新一个WebForm来看看。选择项目右击》添加》Web 窗体。

点击Web 窗体。填写项名称:Index

最后成的结果

看上面最后的图片,我们知道Web 窗体事实上就是一个aspx文件。关于aspx文件是什么。可以理解为JAVA的JSP。就是组装网页的地方。好了。让我们写一个简单的显示列子吧。双击Index.aspx。我们可以看到内容。关于内容下面会讲到。先在内容里面增加一句显示的代码文本吧。如下

Index.aspx内容:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title></title>
  9. </head>
  10. <body>
  11. <form id="form1" runat="server">
  12. <div>
  13. i am aomi
  14. </div>
  15. </form>
  16. </body>
  17. </html>

显示结果:

看到了吧。根本不用装什么服务器。这样子很方便。现在ecilpse内部好像也装有Tomcat了。不过,最好装一下自己本地的Tomcat。个人觉得ecilpse的Tomcat不好用。

完成了上面的例子之后, 让我们在看一下Web 窗体的内容吧。Web 窗体的顶部有这么一段代码。如下

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %>

1.Language:表明当前所用的语言是什么。

2.AutoEventWireup:表示是否自动邦定页面的事件。true表示自动。否则是false。

3.CodeBehind:表示当前页面对的后端代码。

4.Inherits:表示当前 Web 窗体所继承的代码隐藏类。

关于上面的几个关键字的定义网络上一片。如果还是不明白笔者写的话。可以自行去查看。笔者认为关键字CodeBehind正是体现与JSP不同的最好证明了。为什么呢?JSP没有什么叫后端的代码之类的说法。这也是跟Asp.NET最大的区别之一。如果我们接着往下看的话。会出现下面的一段代码。

  1. <head runat="server">

关键的点不是head而。head后面的runat="server"关键字。runat="server"就是用于表示这个HTML标签是服务器控件的意思。那么什么是服务器控件呢?笔者理解比较简单就是通过服务器做分析生成对应的HTML。好比如JAVA的Tag标签。他比普通的HTML标签有一个直观的差别是。后端代码能不能访问的到。只有加了runat="server"之后,后端代码就可以访到这个控件对应的属性了。如上面的Form标签。当然记得增加属性ID的值。

到了这里上面图片可能会看不懂。没事。不如让笔者做一个提交显示的例子来说明后端代码是什么一会事呢?。

一、编程界面底部。选择“设计”。从工具箱中拉出一个Textbox和一个button、一个Label。是不是跟WinForm开发有一点像呢?这是当然了。只是控件的用法和环境不一样子而以。另外要注意的是一定要拉到对应的form标签里面。不然会出问题。

选择“设计”:

拉控件:

二、双击Button。写Button的后端代码就可以了。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. namespace WebExample
  9. {
  10. public partial class Index : System.Web.UI.Page
  11. {
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14.  
  15. }
  16.  
  17. protected void Button1_Click(object sender, EventArgs e)
  18. {
  19. this.Label1.Text = "Hello " + this.TextBox1.Text;
  20. }
  21. }
  22. }

上面的代码还用笔者多说吗?看到红色的代码就知道。输出网页上TextBox的输入的值。同时加上"Hello "。

三。执行输出打印。

好简单啊。这是笔者第一次觉得开发这么的轻松。后端代码相信大家也明白了。跟WinForm开发对应的后端代码有一点像。事实上对于Asp.NET来讲有俩种编码模式。上面是隐藏代码模式。另外还一种叫内联编码模式。

对于内联的话笔者去试了一下。却发现跟书里面讲的很多东西找不到了。本来在新建Web窗体的时候会有一个位置让我们去选择的。我的VS里面却找不到。不过没事。笔者也把代码列出来了。

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebExample.Index" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title></title>
  9. <script type="text/javascript" runat="server">
  10. protected void Button2_Click(object sender, EventArgs e)
  11. {
  12. this.Label1.Text = "button2 ";
  13. }
  14. </script>
  15. </head>
  16. <body>
  17. <form id="form1" runat="server">
  18. <div>
  19.  
  20. <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  21. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
  22.  
  23. <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
  24.  
  25. </div>
  26. <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
  27. </form>
  28. </body>
  29. </html>

在原来的代码里面笔者增加了俩个部分。如下

  1. <script type="text/javascript" runat="server">
  2. protected void Button2_Click(object sender, EventArgs e)
  3. {
  4. this.Label1.Text = "button2 ";
  5. }
  6. </script>
  1. <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />

我们可以看到button2的事件代码。不在后端而是在网页上面。这个时候runat="server"就更加的重要了。你可以理解为上面的脚本就是后端的代码。也就是服务器代码。

读者们是不是觉得看不到JSP的影子。这个很正常。JSP最大的点在于代码段。即是<%%>。其实学习Asp.Net最快最合适的不是学过JAVA的人。而是学过Asp的人。因为Asp.Net里面留下很多相类似的Asp语法。好了。笔者新建一个Web 窗体并设为启动页来说明吧。

Default.aspx的内容:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebExample.Default" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title></title>
  9. </head>
  10. <body>
  11. <form id="form1" runat="server">
  12. <div>
  13. <%
  14. for (int i = 0; i < 10; i++)
  15. {
  16. %>
  17. <%=i %>
  18. <%
  19. }
  20. %>
  21. </div>
  22. </form>
  23. </body>
  24. </html>

是不是很像呢。只是不好意思。普常Asp.NET开发不会用到上面的代码段。主要角色还是服务器控件。所以想要用Asp.NET的朋友。可能你要去了解一个Asp.NET控件了。即是学习工具箱。笔者这边就不说他了。

上面的代码我不清楚读者们有什么的想法。当笔者第一次看到时候,并没有多大的想法。就是觉得很不错。可是当笔者进一步去思考的时候。笔者发现了一点——感觉是JSP+Servlet。后来笔者自己也看一些资料。Asp.NET的操作是引入事情驱动编程。所以我们能看到上面按扭绑定的点击事情。这一点上跟JAVA有着很大的差别。我们都知道哪怕是JSP+Servlet。一般情况下都是一个JSP一个Form标签对应就一个Servlet。什么意思呢?JSP用于HTML的界面设计,而Servlet用于处理业务代码。所以一般情况下都是JSP里面只有一个Form标签。如果有多个什么办?更多用一个参数来表示动作。比如http://xxxxx?action=add。可是Asp.NET引入了事情驱动编程就变得我们可以不用像JAVA那样子操作了。只要绑定好对应的事件就可以了。好比如上面绑定了点击事件。当网页的button被点击的时候,会回发并触发对应的事件。这跟WinForm的操作很像。至于回发是什么,笔者现在只能简单的讲他就是在一次提交后端的意思。我们常常用Page.IsPostBack来判断是不是回发。用于第一次的时候想做一些业务。简而言之,就是Web 窗体的界面设计相当于JSP,而后端代码就相当于Servlet。

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (Page.IsPostBack)
  4. {
  5. this.Label1.Text = "不是第一次<br>";
  6. }
  7. else
  8. {
  9. this.Label1.Text = "第一次 <br>";
  10. }
  11.  
  12. }

既然Asp.NET是基于HTTP的事件驱动编辑,那么作为一名开发人员就有必要去了解一下Asp.NET的生命周期。即是了解他事件触发顺序。这样子我们可以在对应的事件中控制页面和业务。

PreInit事件:这个是生命周期的入口。这个时候页面的控件已经被实例化了。但是可以对母页或主题进行设置。(关于母页和主题笔者不打算讲。请自行进行查看)

Init事件:此时母页和主题设置结束了。一般处理程序的ProcessRequest方法会被执行。(一般处理程序下面会讲到)并以递归的方式触发所有子控件的OnInit事件。

InitComplete事件:这个事件里面做了跟视图状态有关系的事情。视图状态就是上一次储存的控件信息。比如文本框输入提交之后,对应的值还会在文体框里面。可是HTTP是无状态的。那么为什么会这样子。就是因为Asp.NET储存了上一次的视图状态。如下。

PreLoad事件:官方说这个时候没有做任何事情。只是用于说明要进入下一个阶段。

Load事件:这个事情很重要。这个时候所有的控件的视图状态和数据都准备完了。所以访问控件是最安全的。双击页面就可以进入。

LoadComplete事件:用于页面表示加载结束了。

PreRender事件:呈现输出对应的HTML之前发生的事情。开发人员可以在这个事情中做一些文章。当然值得注意的是页面的PreRender事件首先被触发,然后才是子控件。

PreRenderComplete事件:反用于表示PreRender事件结束了。

UnLoad事件:呈现结束之后,就是处理对应的对象。所以子控件先处理掉,然后在处理页面。

上面是笔者简单的说明一下有关Asp.NET的事件发生顺序。其实读者们可以在看完笔者之后在去找一些专门对Asp.NET的博文进行学习。

Asp.NET在界面设计的过程中会用到俩个类控件。分别为HTML控件(原生HTML)和Web控件(上面讲的服务器控件)。这个时候相信大家有心都会有一个问题——有没有像WinForm的自定义控件。当然有了。至于做法大多相似。选择对应的项目右击》添加》新建项。然后选择如下。对于Web窗体用户控件的内容笔者不多了。主要是了解一下关于Asp.NET方便JAVA程序员们知道有这东西存在。

一般处理程序

上面我们了解到了关于Web 窗体的内容。知道了后端代码跟Servlet有一点类似。实际Asp.NET里面还有一个应用跟AVA的Servlet很像——一般处理程序。什么是一般处理程序。看定义没用什么。不如让我们新一个一般处理程序来了解他吧。选择项目右击》添加》一般处理程序。

一般处理程序点击:

新建成功之后:

从图上我们可以看到他的结尾不在是aspx了。而是ashx了。双击Handler.ashx我们就可以看到对应的代码。如下

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace WebExample
  7. {
  8. /// <summary>
  9. /// Handler 的摘要说明
  10. /// </summary>
  11. public class Handler : IHttpHandler
  12. {
  13.  
  14. public void ProcessRequest(HttpContext context)
  15. {
  16. context.Response.ContentType = "text/plain";
  17. context.Response.Write("Hello World");
  18. }
  19.  
  20. public bool IsReusable
  21. {
  22. get
  23. {
  24. return false;
  25. }
  26. }
  27. }
  28. }

执行结果:

相信看到这里。不用笔者多说大家也会明白。除了不能可视化设计界面。一般业务都实现。跟Servlet功能很类似吧。代码上面的ProcessRequest方法就是用于处理请求的。跟JAVA的doPost和doGet很类似。

本章结总

本章主要讲到关于Asp.NET的内容。但是关于Asp.NET的知识点实在太大了。不是笔者这一系列的目地。所以笔者只是简单的介绍关Asp.NET的几个跟JAVA有一点相似的。而且必要掌据的知识。

Java进击C#——应用开发之Asp.net的更多相关文章

  1. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

  2. Java进击C#——应用开发之Linq和EF

    本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...

  3. Java进击C#——应用开发之WinForm开发

    本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...

  4. Java进击C#——应用开发之WinForm环境

    本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开 ...

  5. 应用开发之Asp.net

    本章简言 上一章中笔者讲到关于Linq和EF的用法.并以hibernate来进行讲解.那么本章笔者来讲一下C#的Asp.Net.即是在B/S模式下开发.现在企业大部分的业务都是面向B/S模式的.所以对 ...

  6. Java微信公众平台开发之OAuth2.0网页授权

    根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...

  7. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

  8. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  9. Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”

    整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...

随机推荐

  1. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  2. AJAX 大全

    本章内容: 简介 伪 AJAX 原生 AJAX XmlHttpRequest 的属性.方法.跨浏览器支持 jQuery AJAX 常用方法 跨域 AJAX JsonP CORS 简单请求.复制请求.请 ...

  3. 显示本地openssl支持的加密算法

    参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...

  4. JAVA装饰者模式(从现实生活角度理解代码原理)

    装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职 ...

  5. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  6. class-dump 反编译私有的库和应用

    一.下载并安装class-dump 下载class-dump-3.5.dmg  点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...

  7. SQL-union

    集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个结果)联合(union)与连接(jo ...

  8. 监控 SQL Server (2005/2008) 的运行状况

    Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...

  9. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  10. Android(2)—Mono For Android App版本自动更新

    0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...