asp.net web窗体

1:Http之Get/Post请求区别(这个区别摘自博客园wxf0701网友的 特此声明)

1HTTP请求格式:

<request line>

<headers>

<blank line>

[<request-body>]

HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

2GETPOST区别

HTTP定义了与服务器交互的不同方法,最基本的方法是 GET  POST.

HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。
  HTTP-GET以使用MIME类型application/x-www-form-urlencoded的urlencoded文本的格式传递参数。Urlencoding是一种字符编码,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。附加参数还能被认为是一个查询字符串。
  与HTTP-GET类似,HTTP-POST参数也是被URL编码的。然而,变量名/变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。

(1)get是从服务器上获取数据,post是向服务器传送数据。

(1)   在客户端,Get方式在通过URL提交数据,数据URL可以看到;POST方式,数据放置在HTML HEADER提交。

(2) 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

(2)   GET方式提交的数据最多只能有1024字节,而POST没有此限制

(3)   安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

注:所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说,GET 请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。

下面举一个简单的例子来说明它们的区别:

<!-分别通过get和post方式提交表单--> 
<FORM ACTION="getpost.asp" METHOD="get"> 
<INPUT TYPE="text" NAME="Text" VALUE="
http://wxf0701.cnblogs.com//> 
<INPUT TYPE="submit" VALUE="Get方式"></INPUT> 
</FORM> 
<BR> 
<FORM ACTION="getpost.asp" METHOD="post"> 
<INPUT TYPE="text" NAME="Text" VALUE="
http://wxf0701.cnblogs.com/> 
<INPUT TYPE="submit" VALUE="Post方式"></INPUT> 
</FORM> 
<BR>

<% If Request.QueryString("Text") <> "" Then %> 
通过get方式传递的字符串是: "<B><%= Request.QueryString("Text") %></B>"<BR> 
<% End If %>

<% If Request.Form("Text") <> "" Then %> 
通过Post方式传递的字符串是: "<B><%= Request.Form("Text") %></B>"<BR> 
<% End If %>

2:自动回送:在ASP.net中客户端事件发生在客户端,服务器端的处理发生在服务器端。这就意味着响应事件需要一定的负载。由于这个原因,快速触发事件例如鼠标移动事件在ASP.net的世界中是完全不 切实际的,所以可以用javaScript来操作鼠标移动之类的事件。更好的方法是用ASP.net Ajax控件。使用自动回送时需要把web控件的AutoPostBack属性设为真(默认为假可以优化性能)。当设置为真时,ASP.net 使用客户端的javascript来连接客户端和服务器的代码。换句话说ASP.net 自动将客户端的javaScript变为一个服务器端的ASP.net 事件。

3:视图状态

  

Web 应用程序是无状态的。每次从服务器请求网页时,都会创建网页类的一个新实例。这通常意味着在每次往返过程中将会丢失所有与该页面及其控件关联的信息。例如,如果用户将信息输入到 HTML 网页上的文本框中,此信息将发送到服务器,但是不会返回到客户端。为了克服 Web 编程的这一固有局限性,ASP.NET 页框架包含几种状态管理功能,可以将往返过程之间的页和控件值保存到 Web 服务器,其中一种功能便是视图状态。有关状态管理的更多信息,请参见 ASP.NET 状态管理概述

 

视图状态是 ASP.NET 页框架默认情况下用于保存往返过程之间的页和控件值的方法。当呈现页的 HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为 Base64 编码的字符串,并输出到视图状态的隐藏字段中。通过实现自定义的 PageStatePersister 类以存储页数据,您可以更改默认行为并将视图状态存储到另一个位置(如 SQL Server 数据库)。有关将页状态存储到流上而不是隐藏的页字段中的示例,

使用视图状态的注意事项

视图状态提供了特定 ASP.NET 页的状态信息。如果需要在多个页上使用信息,或者如果需要在访问网站时保留信息,则应当使用另一个方法(如应用程序状态、会话状态或个性化设置)来维护状态。

视图状态信息将序列化为 XML,然后使用 Base64 编码进行编码,这将生成大量的数据。将页回发到服务器时,视图状态的内容将作为页回发信息的一部分发送。如果视图状态包含大量信息,则会影响页的性能。因此,建议使用应用程序的典型数据测试页性能,以确定视图状态的大小是否导致应用程序的性能问题。有关使用视图状态的其他注意事项,请参见 ASP.NET 状态管理建议

在某些情况下(如数据驱动页在每次回发时从数据存储区进行刷新),应当关闭视图状态以移除由数据控件(如 GridView 控件)生成的大量隐藏字段。

另一个重要的考虑因素是,如果隐藏字段中的数据量过大,某些代理和防火墙将禁止访问包含这些数据的页。由于最大数量会随所采用的防火墙和代理的不同而不同,因此大量隐藏字段可能会导致偶发性问题。为了帮助避免这一问题,如果 ViewState 属性中存储的数据量超过了页的 MaxPageStateFieldLength 属性中指定的值,该页会将视图状态拆分为多个隐藏字段,以将每个单独字段的大小减少到防火墙拒绝的大小以下。

 

 

 4:一个简单的例子怎样获得视图状态的值,保存敏感的信息最好加密。

protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "hello,workd";
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string viewStateString = "/wEPDwUKMTI2NTY4ODI3MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFC2hlbGxvLHdvcmtkZGRklEAwGt+6k9LZS1XQSMHE4AuEjqN9E8jQ3gPZ3xobpps=";
        byte[] stringBytes = Convert.FromBase64String(viewStateString);
        string s = System.Text.Encoding.ASCII.GetString(stringBytes);
        Label1.Text = s;
    }

5:视图状态程序分块

<configuration>

  <system.web>

    <pages maxPageStateFieldLength ="1024"/>//如果视图状态超过这个值时就会分块。应在视图状态中尽量减少信息。

  </system.web>

</configuration>

6:web窗体的处理阶段

每个阶段注意事项:

6.1:页面框架初始化:如果不是第一次请求ASP.Net将反序列化视图状态信息并把他们应用到所有的控件上。

6.2:用户代码初始化:if(!Page.IsPostBack)第一次请求 最好在控件标签里设置属性。

6.3:自动数据绑定:本质上有两种数据源操作。所以任何改变(插入,删除或更新)都在所有的控件事件处理之后,Page_PreRender事件发生之前执行的。然后,在Page_PreRender事件被触发后,数据源控件执行查询并把获得的数据插入到关联的控件中。

7:动态添加页头

protected void Page_Load(object sender, EventArgs e)
    {
  Page.Header.Title = "Dynamically Titled Page";

        // Define a metadata tag with description information.
        HtmlMeta metaDescription = new HtmlMeta();
        metaDescription.Name = "description";
        metaDescription.Content = "A great website to learn .NET";

        // Add it.
        Page.Header.Controls.Add(metaDescription);

        // Define and add a second metadata tag.
        HtmlMeta metaKeywords = new HtmlMeta();
        metaKeywords.Name = "keywords";
        metaKeywords.Content = ".NET, C#, ASP.NET";
        Page.Header.Controls.Add(metaKeywords);

    }

8:动态控件的创建

private void Page_Load(object sender, EventArgs e)
    {
  // Create a new button object.
  Button newButton = new Button();

  // Assign some text and an ID so you can retrieve it later.
  newButton.Text = "* Dynamic Button *";
  newButton.ID = "newButton";

  // Attach an event handler to the Button.Click event.可以处理事件委托代码必须在page_load事件处理程序中执行这一操作。
  newButton.Click += new System.EventHandler(this.Button_Click);

  // Add the putton to a placeholder.
  PlaceHolder1.Controls.Add(newButton);
    }

 protected void Button_Click(object sender, System.EventArgs e)
 {
  Label1.Text = "You clicked the dynamic button.";
 }

 protected void cmdReset_Click(object sender, System.EventArgs e)
 {
  Label1.Text = "(No value.)";
 }

 protected void cmdRemove_Click(object sender, System.EventArgs e)
 {
  // Search for the button, no matter what level it's at.
  Button foundButton = (Button)Page.FindControl("newButton");

  // Remove the button.
  if (foundButton != null)
  {
   foundButton.Parent.Controls.Remove(foundButton);
  }
 }

 protected void cmdCreate_Click(object sender, System.EventArgs e)
 {
  // (Button is automatically created in postback.)
 }

9:Page类(属性有 Session,Application,Cache,Request,Response,Server,User,Trace)

转载于:https://www.cnblogs.com/yikeshu/archive/2012/03/13/2393759.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值