不拖控件ASP.NET——一般处理程序

2024-05-26 07:48

本文主要是介绍不拖控件ASP.NET——一般处理程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    习惯了微软提供的一系列Web控件,用着很方便,最近看了一种新的方式不用拖控件就能实现同样的功能,究竟拖控件好还是不拖控件好,随着以后学习的深入,答案会慢慢揭晓,希望一直关注哦!今天我们来看看一般处理程序。

  1.      一般处理程序(HttpHandler)

    Ø  引入

    我们从一个网站打开的流程讲起。如下图:


    流程细说:用webForm开发一个模拟的登陆页面,用户打开登陆页面,填入相应的用户信息:用户名和密码,点击【登陆】按钮,浏览器将用户名和密码发送给网站服务器,网站服务器让负责处理登陆请求的asp.net处理程序来处理这个请求,处理程序判断用户名和密码是否正确,之后将处理结果返回给浏览器。

    上网的本质:上网就是从服务器向浏览器传送Html格式描述的网页,每次请求都带回来新的页面;页面中的图片、js、css在单独的请求中。

    注解:我们知道像Html文件、css文件以及javascript是由浏览器进行解析的,在上面的登陆流程中,基本上可以分为三部分:向服务器发请求(请求)—服务器进行处理渲染成html(处理)—返给浏览器并且画出来给客户端(响应)。

    Ø  HttpHandler

    从上面的引入我们知道浏览器与服务器请求-处理-响应的交互方式,那么HttpHandler(一般处理程序)扮演的即是服务器处理者的角色,整个操作是:

    浏览器搜集用户操作向服务器发送请求——服务器处理请求并且把结果渲染成html文件——浏览器响应服务器的操作,并且把返回的结果进行解析和显示。

    Ø  实例

    第一个例子

    此时如果没有挂到iis的网站的默认目录下需要手动输入地址,以及参数name和age即可

    此时httphandler.ashx代码为:

<strong><span style="font-family:Microsoft YaHei;font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;namespace handler
{/// <summary>/// TestHandler 的摘要说明/// </summary>public class TestHandler : IHttpHandler{public void ProcessRequest(HttpContext context){//context.Response.ContentType = "text/plain";context.Response.ContentType = "text/html";string action = context.Request["name"];string isVIP=context.Request["isVIP"];int age = Convert.ToInt32(context.Request["age"]);context.Response.Write("<font color='red'>Hello "+action+"</font>");context.Response.Write("<font color='green'>我今年 " + age + "</font>");}public bool IsReusable{get{return false;}}}
}</span></strong>

    此时效果是:


    第二个例子

    我们发现每次手动输入参数的时候是很容易出现错误的,所以我们可以用html表单自动提交给服务器进行处理

    修改代码如下:

HTML页:

<strong><span style="font-family:Microsoft YaHei;font-size:14px;"><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
</head>
<body><form action="TestHandler.ashx" method="post">姓名:<input type="text" name="name" /><br />年龄:<input type="text"name="age" /><br /><input type="checkbox"name="isVIP" /><div name="aaaaa">哈哈哈哈</div><textarea name="msg"></textarea><select name="Prov"><option value="bj">北京</option><option value="tj">天津</option><option value="sh">上海</option></select><ul> <li><input  type="radio" name="gender" value="male"/>男</li><li><input  type="radio" name="gender" value="female"/>女</li></ul><ul> <li><input  type="radio" name="national" value="han"/>汉</li><li><input  type="radio" name="national" value="man"/>满</li></ul><input type="submit" /></form>
</body>
</html>
</span></strong>

    一般处理程序:同上。

    操作步骤详解:

      1.      Html表单<form>可以自动给服务器提交参数(get是通过url,post是通过报文体),不用用户自己拼url。Action指定把表单内容提交给谁。即action和method指定了提交给哪个HttpHandler以及提交方式。

      2.      浏览器向服务器端提交数据,被提交数据的表单(input、select、textarea等)放到form中,form通过action属性设定表单被提交给哪个页面,为了在服务器端取出来表项的值,需要在HTML为表单元素设定name属性。

      3.      注意id是给js操作dom的,name才是提交给服务器用的。Id不能重复,name可以重复。

      4.      服务器端(此处是httphandler)用context.Request[“username”]来根据表单项的name来获取提交的属性值。

    特别注意:

      1.      点击提交按钮时是浏览器将用户填写的文本框等空间中的值“提取”出来发送给服务器,而不是服务器来读取用户填写的信息

      2.      可以被提交到服务器的标签具有以下的特性:

        A、 只能为Inputtextareaselect三种类型的标签。只有这些标签用户才可能修改值,<lable><p>、<font>,只是显示,没有提交到服务器的必要。input=submit的时候,只有被点击的按钮的value才会被提交。提交的表单的内容,会提交到服务器。(此外有一种隐藏控件input=hidden,是一种服务端控件,也会被提交到服务端,原因在于其在浏览器上映射成的是input控件,type="hidden"

        B、 只有三种标签的value属性的值才会提交给服务器,input标签的title、type等属性,只是显示,用户无法修改。

        C、 标签必须设定name属性,如果要将标签的value值提交到服务器,则必须为标签设定name值,提交到服务器的时候将会以“name=value的键值对的形式提交给服务器,name是给服务里用的,id是js操作dom用的,对于radiobutton,同name为一组,选中的radiobutton的值被提交到服务器。

        D、 放到form标签内,只有放到form标签内的才可能被提交到服务器。Form外的input等标签被忽略。

  2.      Get和post

    Ø  区别

    1.      Get是通过url传递表单值的,post通过url看不到表单域的值;

    2.      Get传递的数据量是有限的,如果传递大数据量不能用get,比如type=”file’,<textarea>发表大段文章。Post则没有这个限制。但是post无法通过url在其他用户中还原,这样会显示不对。

    3.      Get方式url数据格式,服务器端文件名后跟着“?“,由于客户端可能向服务器端提交多个键值对,键值对之间用”&“进行分割,如果url存在汉字或者特殊字符,则需要对其进行编码。

    Ø  示例显示

    在ie9用F12开启网络流量捕获即可

    Get请求标头中含有请求时发送的数据;请求正文为空:


    Post请求时发送的数据从标头字符串中,转移到请求正文中


  3.      http协议以及报文请求

    Ø  协议

    1. 连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,http不保持连接,或称为短连接。这样的优点是可以增强服务器处理的客户端并发请求数;缺点是会降低服务器处理速度,因为建立连接的速度很慢。

    2. 请求(Request):浏览器向服务器发送的请求信息,包含请求的类型、数据、浏览器(客户端)的信息(语言、浏览器版本、IP地址)等。

    3. 响应(Response):服务器处理浏览器请求后返回的数据,包含请求是否成功、错误码等。

    Ø  报文解析(请求一个页面比如csdn自己的)

      请求

         1、Get/HTTP/1.1表示向服务器用GET方式请求page,使用Http1.1协议。

    2、Accept-Language表示浏览器支持的语言种类。User-Agent为浏览器的版本信息。

    3、Referer:为(图片、js、css文件等)来源页面、所属页面。

    响应

      响应码:“200”OK 表示请求响应成功;

      “302”:Found表示重定向,Response.Redirect()使浏览器再请求一次重定向的地址,重定向请求方式为Get。

      “404”:Not Found表示未找到所请求页面。

      “500”:表示服务器内部出现错误

 

    Content-Type:text/html:表示返回数据的类型,服务器通过此属性告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型(image/gif)就显示,如果是文本类型(text/plain)就直接显示纯文本代码等等。可以自己试试比较看设成text/html和text/plain的区别。动动手吧。

  4.      总结

    了解了浏览器和服务器端是如何工作的,更加便于我们理解代码,之前我们一直用控件拖拽进行开发,看似很方便,其实在拖拽控件的时候,控件会给我们生成一些其他的东西。

    在这里我们利用了html+httphandler实现了浏览器和服务端的交互,其实相当于web窗体,我们知道web控件都是能够提交到服务器,因为有runat=“server“,但是我们在此时利用form表单提交到handler进行处理,此时hanler相当于服务端,其好处还需要在以后的深入学习中慢慢体会,学习仍在继续,请继续关注~



这篇关于不拖控件ASP.NET——一般处理程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003861

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 引言 在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的