日期:2014-05-16  浏览次数:21077 次

CS Coder学习asp.net5个月的最大感悟:从http的角度重新认识asp.net(一)

写在前文:  

对asp.net这门技术,我个人的感情是比较矛盾的,喜欢她,是因为这门技术带领我走进了bs的大门,让我完成了从cs程序员到bs程序员的转变。而厌恶她,则是因为,我差点就被她带入了歧途,通过对http请求处理的层层封装,弄个runat server和viewState,让bs程序(表明上)可以像cs一样的运行。这确实是降低了bs的入门门槛,但也造成了asp.net程序员对bs本质的理解的障碍,导致写起程序来,总感觉隔着点什么。

    首先,说下我自己接触asp.net的过程,大三搞android,大四上搞的是winform,大四下学期自己看了2个月的j2ee,也就学到serverlet处理form请求的部分(现在很庆幸当时刚好学到了这里)所以其实3月份找工作时,我可以算作一个标准的cs开发者的,大部分时候都是cs思维,ui线程阻塞,后台线程通过socket和service通信,通过委托和事件完成用户的交互性操作。。。

    算上实习,到现在,差不多搞了五个月的asp.net了,还记得刚开始,感觉webform真是爽,各种控件各种拖,像写cs程序一样,而且没有复杂绕脑的事件和多线程同步,这是比cs还要简单的节奏啊生气。然后我接触到了js,jquery,以及——ajax。蛋疼的时刻终于到来鸟~~

    boss是个对用户体验非常看重的人,我们系统中,基本大部分页面都是需要做无刷新效果的,jquery ajax这东西用起来倒也不难,再加上还有UpdatePanel,AjaxPrp此等“神器”,我们照着demo照猫画虎的写好了一些页面,效果也还不错,但后来页面数度改版,用上了母版页,ifram嵌套等,问题就全出来了。至于是什么问题,怎么解决,这里就不做深入讨论了,因为之所以出现那些问题,就是我对bs的认识不够,当我真正拨开迷雾看到本质的时候,这些问题,自然就不是问题了。当然,我所谓的“看到本质”,是相对于我1个月之前对于asp.net的认识,但是毕竟我接触的还太少,对很多东西的理解还是比较模糊的,但愿这篇文章不会出现太多的谬误,大神路过的话,还请留下您的宝贵意见。

要写什么和怎么写:

其实主要就是我一个cs coder,转变为bs coder的一点点感悟和总结,希望能给和我一样经历这种转变的同学一点帮助。

大致分两部分,第一是对http请求的一点说明,第二是以ajax使用为例子,用我文章中的思维模式去理解ajax。

正文开始:
1.:http请求在asp.net中扮演了什么角色?

    归纳为一句话:在客户端(b)这边把数据放在http请求中,传递给服务端(s),服务端处理完数据之后,response回一些信息,客户端可以收到这些信息。

    先来看一个简单的场景,一个输入框输入文字,一个按钮(服务器控件)触发事件(这是按照cs思维来解释,事实上是提交表单数据),然后一个lbl显示后台收到的信息。

但是这么简单的代码,我仍然认为有贴出来的必要。

<body>
    <form id="form1" runat="server">
        <asp:Button runat="server" ID="btnPost" Text="事件回发Post" OnClick="PostChange" />
        <br />
        <asp:TextBox ID="txtInput" runat="server" Width="700"></asp:TextBox>
    </form>
        <br />
        <asp:Label runat="server" ID="lblShowResult"></asp:Label>
</body>

后台业务代码:

 protected void PostChange(object sender, EventArgs e)
        {
            lblShowResult.Text = "your input :" + txtInput.Text + "\n and from form:" + Request["txtInput"];
        }

    一个我以前忽视的问题,也是我开始思考的地方。就是:那个form标签是干啥用的啊?去掉行不行?前面我说过,我很庆幸学java web的时候,刚好是看完了serverlet处理form请