zoukankan      html  css  js  c++  java
  • ASP.NET WebForm

    ASP.NET WEBFORM

    Aspx

    aspx文件(新建项→Web窗体) 。在aspx中可以使用<%=表达式%>的方式在页面的当前位置输出表达式(表达式至少要用protected级别,后面会讲为什么,如果自动提示出不来,则重新生成项目)或者局部变量,表达式也可以是一个方法、属性、字段。不要忘了写=。
    这个文件可以几乎写入任何的C#语句(就像当年的ASP)。

    aspx和ashx关系

    aspx和ashx关系:aspx就是一个特殊的IHttpHandler ,aspx对应的类是Page,它是实现了IHttpHandler接口,所以可以说aspx是高级的HttpHandler, aspx中帮我们封装了很多操作,我们可以傻瓜化的进行开发。
    反编译看:其实=就是相当于Response.Write(),直接写Response.Write()也可以。
    ashx(handler),aspx(page)

    aspx

    Web窗体设计页面。Web窗体页由两部分组成:视觉元素(html、服务器控件和静态文本)和该页的编程逻辑(VS中的设计视图和代码视图可分别看到它们对应得文件)。VS将这两个组成部分分别存储在一个单独的文件中。视觉元素在.aspx 文件中创建。

    ashx

    ashx文件是主要用来写web handler的。使用.ashx 可以让你专注于编程而不用管相关的web技术。我们熟知的.aspx是要做html控件树解析的,.aspx包含的所有html实际上是一个类,所有的html都是类里面的成员,这个过程在.ashx是不需要的。ashx必须包含IsReusable属性(这个属性代表是否可复用,通常为true),而如果要在ashx文件用使用Session必须实现IRequiresSessionState接口。

    aspx、aspx.cs关系

    部分类

    使用ILSpy或者Reflector等打开dll,反编译这两个类,发现ASPNETTest1.WebForm1是在VS中编写的aspx.cs类,而ASP.webform1_aspx则是一个继承自ASPNETTest1.WebForm1的子类,ASP.webform1_aspx代码是根据aspx内容动态生成的构建网页内容的类。综上,aspx最终也会生成一个类,这个类是继承自aspx.cs中的类。查看反编译以后的代码,可以看到就是编译生成了普通的.Net 代码,代码中在拼接html。因为aspx生成的代码是cs类的子类,所以就明白了为什么“aspx中调用cs的成员级别必须是protected或者public,不能是private的。

    轻量级控件

    asp.net webform:Button、TextBox、CheckBox、RadioButton、FileUpload、DropDownList、ListBox、Repeater。

     Button控件

    OnClientClick属性,当用户点击按钮的时候在浏览器端执行的代码,注意OnClientClick是字符串属性,写的代码是JavaScript代码,渲染成onlick,运行在浏览器端。<asp:Button ID="btnDel" runat="server" onclientclick="return confirm('真的要删除吗?')" Text="删除" /> 服务器端的OnClick。

    LinkButton

    用法和Button差不多,区别就是Button控件渲染为按钮,而LinkButton渲染为超链接。不要用LinkButton来实现普通的超链接:OnClick→Redirect,作死的节奏。 LinkButton真没啥用,除了长得像Button一样。不利于SEO;而且效率低。

    FileUpload

    WebForm会很“操心”的在form中自动帮我们加上enctype="multipart/form-data"

    Repeater

    Repeater相当于一个高级的foreach,每一项的显示用ItemTemplate格式去显示。
    1  <asp:Repeater ID="Repeater1" runat="server">
    2             <ItemTemplate>
    3                 <tr><td><%#Eval("Name")%></td><td><%#Eval("Age")%></td></tr>
    4             </ItemTemplate>
    5         </asp:Repeater>
    <%=test()%>:当前位置打印出来
    <%test()%>:调用test方法
    <%#Eval("Id")%>:数据绑定

    ViewState

    asp.net4.5之后ViewState做了加密处理,无法用ViewState查看器查看了,首先在Web.config的system.web节点下增加<machineKey compatibilityMode="Framework20SP1" />(开发不要这样干,只是为了研究),然后使用ViewStateDecoder2.0查看。
    之前讲过HttpHandler是无状态的,aspx是高级的HttpHandler所以同样是无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面相关的变量怎么办呢?比如点击按钮“点击次数”加一。
    什么原理?查看页面的__VIEWSTATE,它是一个隐藏的input。每次页面渲染生成html的时候,asp.net把ViewState中的值进行编码处理序列化为__VIEWSTATE这样一个隐藏字段放到html中,下次再次提交的时候把__VIEWSTATE提交,服务器把__VIEWSTATE反序列化填充到ViewState属性中。其实就是把浏览器端当成“数据暂存”场所。反编译看看Label的Text实现。
    除了ViewState属性,还有哪些数据会放到__VIEWSTATE中?所有在cs代码中修改的值,比如给DataSource赋值的,比如Label的Text是没有放到__VIEWSTATE的,但是代码中给Text属性赋值就会被放到__VIEWSTATE中了。所以__VIEWSTATE是用来盛放“本次修改的内容”供“下次请求”还原现场使用,把Http模拟成了有状态。
    Repeater的这一堆ViewState,坏处是什么?ViewState是可以被禁用的(页面EnableViewState="false";单控件禁用、单页面禁用、整站禁用),客户端只会保留基本的__VIEWSTATE。
    什么时候可以禁用ViewState:当数据不需要“下次”使用的时候(不是只有设置,而是有读取控件的值的时候),就可以禁用
     数据出错则把Label设置为红色,需要启用ViewState吗?
     数据出错则把Label设置为红色,否则设置为绿色;点击BtnClear,如果Label为红色,则把Label设置为黑色,需要启用ViewState吗?
     把数据显示到Repeater中,需要启用ViewState吗?
    全站禁用ViewState:system.web下<pages enableViewState="false"/>
    先禁用,实在不行再启用。没有非要ViewState才能干成的事
    (*)要想完全禁用ViewState要去掉form的runat=server,大部分服务器控件就都用不了了。MVC模式+Repeater。
  • 相关阅读:
    探测行星-搜寻外星行星
    NLM非局部均值算法相关
    LBP纹理特征
    IPOL图像处理分析经典在线(文献+源码)
    Halcon学习之四:有关图像生成的函数
    Halcon学习之三:有关图像通道的函数
    Halcon学习之二:摄像头获取图像和相关参数
    Halcon学习之边缘检测函数
    Halcon学习之一:查询图像参数
    Halcon学习之两幅图像处理
  • 原文地址:https://www.cnblogs.com/Tan-sir/p/4721367.html
Copyright © 2011-2022 走看看