1、ashx介绍以及ashx文件与aspx文件之间的区别

  ashx是什么文件?

.ashx 文件用于写web handler的。

.ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。

.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。

ashx文件是.net 2.0新加的文件类型(其实在.net 1.0下已经可用,但是没有公开提供).

ashx文件和aspx文件有什么不同? 我们先新建一个ashx文件看看:

代码示例:
当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable

<% @ webhandler language="C#" class="AverageHandler" %>

  using System;
  using System.Web;
  public class AverageHandler : IHttpHandler
  {
   public bool IsReusable
   { get { return true; } }    public void ProcessRequest(HttpContext ctx)
   {
   ctx.Response.Write("hello");
   }
  }

.ashx比.aspx的好处在于不用多一个html

比aspx简洁多了,只有一个文件,没有后台cs文件(基于代码安全考虑,后边我们会自己添加这个文件)

.ashx对比aspx文件就好像 少了cs文件,其实这就是ashx和aspx不同的地方,因为aspx要将前后台显示和处理逻辑分开,所以就弄成了两个文件。

其实,在最终编译的时候,aspx和cs还是会编译到同一个类中去,这中间就要设计html的一些逻辑处理。

而ashx不同,它只是简单的对web http请求的直接返回你想要返回的结果,比aspx少处理了html的过程,理论上比aspx要快。

看看.net config文件中对两个文件类型请求的配置吧

<add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
<add path="*.ashx" verb="*"
type="System.Web.UI.SimpleHandlerFactory" validate="True"
/>

可以看到两个文件处理的类不一样(ashx处理的类叫SimpleHandleFactory,既然叫Simple,应该处理过程也比较 Simple,响应速度也应该快点吧:)

2、DropDownList 动态绑定数据

前端源代码效果及后端代码,分别如下

<asp:DropDownList ID="ddlCurrencyCode" runat="server" Width="173">
<asp:ListItem Text="全部" Value="" />
<asp:ListItem Text="人民币" Value="RMB" />
<asp:ListItem Text="港币" Value="HKD" />
</asp:DropDownList>
this.ddlCurrencyCode.Items.Clear();
this.ddlCurrencyCode.Items.Add(new ListItem { Value = "", Text = "全部" });
ListItem listItem;
list.ForEach(item =>
{
listItem = new ListItem();
listItem.Text = item.Key;
listItem.Value = item.Key;
this.ddlCurrencyCode.Items.Add(listItem);
});

3、动态控制颜色

<td align="center" style='color:<%# Container.ItemIndex == 0 ? "green":"red"%>'>

4、CheckBoxList动态绑定数据、CheckBox设置间距

<asp:CheckBoxList ID="chklSellChannelID" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow"></asp:CheckBoxList>

后端:

var lists = new BasicInfoPresenter().ConvertHotelSellChannel(SellChannels);
chklSellChannelID.DataSource = lists;
//根据lists的字段 去设置控制的value和text
chklSellChannelID.DataValueField = "HotelSellChannelId";
chklSellChannelID.DataTextField = "ChannelName";
chklSellChannelID.DataBind();
foreach (ListItem item in chklSellChannelID.Items)
{
item.Attributes.Add("style", "display:block;margin-right:20px;float:left;");
if (item.Value.Contains($"{(int)SellChannelType.Static}") || item.Value.Contains($"{(int)SellChannelType.CB}"))
{
item.Selected = true;
item.Enabled = false;
}
if (item.Value.Contains($"{(int)SellChannelType.Dynamic}"))
{
item.Selected = false;
item.Enabled = false;
}
}

CheckBox选中的判断:

ListItem _list;
foreach (var ctl in chklSellChannelID.Items)
{
if (ctl is ListItem)
{
_list = (ListItem)ctl;
if (_list.Selected == true)
{
}
}
}

5、asp.net使用include包含文件

  用asp.net使用include包含文件?……有必要吗?使用“用户控件”不是更好吗?

当然,绝大多数情况下,用户控件都能解决问题。但若要在用户控件中需包含其他公用块,即使用用户控件嵌套,老是出问题,而且也没必要使用asp.net的用户控件,因为我要包含的块是静态的,例如在head中包含一个logo……

1、asp.net页面也可以像asp那样,用include来包含文件:

<div class="includeParent">
3.include htm:
<!--#include file="include/HeadAd.htm"-->
</div>

2、也可以包含有服务端代码的aspx或ascx文件,但它必须是动态编译的文件(是CodeFile或单文件,而非CodeBehind编译的)。

<div class="includeParent">
4.include aspx:
<!--#include file="include/HeadNav.aspx"-->
</div>
<div class="includeParent">
5.include ascx:
<!--#include file="include/HeadNav.ascx"-->
</div>

HeadNav.aspx和HeadNav.ascx的内容示例:

<div class="includeDiv"><%=Guid.NewGuid().ToString()%></div>

3、也可以使用asp.net的“Response.WriteFile”方法,但仅限于静态文件:

<div class="includeParent">
1.WriteFile htm:
<%Response.WriteFile("include/HeadAd.htm");%>
</div>

实际应用,将图片放NavLogo.html中当公共页面,被多个页面共享,发生修改时只改一处即可。

NavLogo.html的内容如下:

<div class="logo-grop">
<img class="logo" src=<%=System.Web.Configuration.WebConfigurationManager.AppSettings["navLogoImg"] %> title="logo" />
</div>

6、aspx前台写后台代码控制显示与否

  有时候在一个Table中展示了一些列,但是可能某一列只在特殊条件下 才要展示出来。那就可以在前台写C#代码来控制。

利用 <% %>来控制,在后台定义一个bool型变量VisibleInfo作为控制。

 <tr>
<th width="14%" height="20" >原幣</th>
<th width="10%" >匯率</th>
<th width="14%">港幣</th>
<th width="14%" >提交港幣</th>
<th width="14%" >實收金額 </th>
<% if (VisibleInfo)
{
%>
<th style="width:16%">ctrip促銷</th>
<%} %>
<th width="34%">優惠</th>
</tr> <tr>
<td align="center">
<asp:Literal ID="original" runat="server"></asp:Literal></td>
<td align="center">
<asp:Literal ID="exchangeRate" runat="server"></asp:Literal></td>
<td align="center">
<asp:Literal ID="dollarhk" runat="server"></asp:Literal></td>
<td align="center">
<asp:Literal ID="submit" runat="server"></asp:Literal></td>
<td align="center">
<asp:Literal ID="receivedAmount" runat="server"></asp:Literal>
</td>
<% if (VisibleInfo)
{
%>
<td style="text-align: center">
<asp:Literal ID="PromotionPrice" runat="server"></asp:Literal></td>
<%} %>
<td align="center">

7、asp.net几种数据绑定方法

  •  使用<%= %> ,=后面接后端的变量或者有返回值的方法,且他们的访问修饰符为protected或者public

例如:(1)前端代码:

<span><%=Content%></span>

后端代码:

public string Content; 
protected void Page_Load(object sender, EventArgs e) { Content="this is a demo!" }

<span><%=Content%></span>等价于<span>this is a demo!</span>

提示:Content必须是公有或者受保护的变量

也可以是后端的方法

<span><%=getName()%></span>
  • 使用<%#Eval()%>方法,该方法用于定义单向(只读)绑定

绑定数据的字段,一般用在数据绑定控件DataBind()方法执行时被执行

<asp:Lable id="lable1" runat="server" Text='<%#DataBind.Eval(Container.DataItem,"UserName")%>'/>
简化版
<asp:Lable id="lable1" runat="server" Text='<%#Eval("UserName")%>'/>
  • 使用<%#Bind()%>方法,该方法用于定义双向(可读可写)绑定
<asp:Lable id="lable1" runat="server" Text='<%#Bind("UserName")%>'/>
  • 数据绑定表达式,<%# 数据绑定表达式%>,数据绑定表达式可以是一个变量,也可以是一个带返回值的c#方法

例如:

<li>
<span><%#getName()%></span><!--getName()为一个后台有返回值的方法-->
</li>
<li>
<span><%#UserNake%></span><!--UserName为后台一个公有或受保护的变量-->
</li>

提示:上诉<%#%>数据绑定方法用于服务器控件,必须通过DataBind()绑定数据源

8、WebForm 之 Ajax 请求后端处理

  通常采用一般处理程序(.ashx)来处理,新建一个页面和一般处理程序

aspx前端页面,创建表单元素

<body>
<div>
用户名:<input type="text" id="name"><br />
密 码:<input type="text" id="pwd" />
</div>
<div>
<input type="button" value="提交" onclick="javascript:submit();" />
</div>
</body>

点击 "提交" 按钮 往后台异步请求,并弹出后台返回的文本数据。

async 默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。

注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

<script type="text/javascript">
var submit = function () {
var name = $("#name").val();
var pwd = $("#pwd").val();
$.ajax({
url: "WebFormAjaxDemo.ashx",
type: "post",
data: { "name": name, "pwd": pwd, "requestMethod": "register" },
dataType: "text",
//async: false,
beforeSend: function (XHR) {
},
complete: function (XHR, TS) {
},
success: function (data) {
alert(data);
} });
};
</script>

一般处理程序的后台处理前台发送的请求,并返回处理的结果。

public void ProcessRequest(HttpContext context)
{
// 接收前台要请求的方法
string requestMethod = context.Request["requestMethod"]; // 存储返回结果
string returnResult = string.Empty;
// 这种方式可以处理前台的多种异步请求
switch (requestMethod)
{
case "register":
{
returnResult = Register();
} break;
default:
{ returnResult = "no method"; } break; }
// 返回处理结果
context.Response.Write(returnResult);
} /// <summary>
/// 注册
/// </summary>
/// <returns></returns>
public string Register()
{
// 获取表单数据
var name = HttpContext.Current.Request["name"];
var pwd = HttpContext.Current.Request["pwd"]; if (pwd == "")
{
return "ok";
}
return "no";
}

不过实在不想新建一般处理程序ashx,而采用aspx.cs后端也可以,例如:

function AjaxRquest() {
$.ajax({
url: location.href,
type: "POST",
data: { "RequestType": "AjaxRequest", "id": "1" },//模拟个数据
success: function(data) {
alert(data);
}
});
}
protected void Page_Load(object sender, EventArgs e)
{
if (Request["RequestType"] == "AjaxRequest")
{
string id = Request["id"];
Response.Clear();
Response.Write("ID : " + id + " ," + DateTime.Now);
Response.End();
return;
}
}

9、.aspx文件都以Page指令开始

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="GENV.Home" %>

Page指令指定了页面所采用的语言,并且告诉ASP.NET从哪里可以找到关联的代码文件。

AutoEventWireup="true"以自动方式将页事件与方法相关联。CodeFile特性指定包含代码隐藏的文件,Inherit特性指明正在使用的类(partial class分部类,后台代码的类名)

<%@Register src="xxxx.ascx" %>引用一个用户控件,将它注册到当前页面来使用。

10、Http中Get/Post请求区别

对于get方式,服务器端用Request.QueryString获取变量的值,

对于post方式,服务器端用Request.Form获取提交的数据。

eg:

get方式 <a href="View.aspx?cityid=CITY0001"><liclass="li2"></li></a>  后端 String cityID =Request.QueryString["cityid"];

post方式  var url ="Handler/ViewHandler.ashx";
                $.post(url, {type:"getCheChangByID",id: id......  后端 string ID = context.Request["id"];

【WebForm】知识笔记的更多相关文章

  1. Elasticsearch集群知识笔记

    Elasticsearch集群知识笔记 Elasticsearch内部提供了一个rest接口用于查看集群内部的健康状况: curl -XGET http://localhost:9200/_clust ...

  2. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  3. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  4. 阿里内部资料:Android开发核心知识笔记共2100页,58万字,完整版开放下载

    作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难初中级Android岗位薪资上升空间有限,基本上 ...

  5. 刻意练习,逃离舒适区——怎么样成为一个高手[罗辑思维]No.183_知识笔记

    2016/10/30 14:31:32   一.对事物的见解分为两类:         1.评论性的见解               说的内容都是对的,符合常理的,但是却是不解决问题的.       ...

  6. Javascript 基础知识笔记

    标签(空格分隔): 廖老师学习笔记 javascript 基本入门 根据廖雪峰老师官网,自己看后的简单笔记 第一小节 基本知识 <script type="text/javascrip ...

  7. 初学MySQL基础知识笔记--01

    本人初入博客园,第一次写博客,在今后的时间里会一点点的提高自己博客的水平,以及博客的排版等. 在今天,我学习了一下MySQL数据库的基本知识,相信关于MySQL的资料网上会有很多,所以我就不在这里复制 ...

  8. javascript基础知识笔记-自用

    笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...

  9. Mysql之基础知识笔记

    Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...

随机推荐

  1. mysql 将一张表里的数据插入到另一张表

    1. 表结构一样 insert into 表1 select * from 表2 2. 表结构不一样 insert into 表1 (列名1,列名2,列名3) select 列1,列2,列3 from ...

  2. C#特征备忘

    [assembly:System.CLSCompliant(true)]----利用CLSCompliant属性,可以把程序集标记为与CLS兼容,但仍可以将个别方法的CLSCompliant值设为fa ...

  3. 011 - JDK自带的性能监控工具

      一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread du ...

  4. 20170729xlVba SSC_RECENT100

    Public Sub Recent100() Dim WebText As String Dim Reg As Object, Mh As Object, OneMh As Object Dim i ...

  5. 3-4 8精彩算法集合。struct(C,ruby) Ruyb类对象和结构体, 3-5

    在本章我遇到了c语言的struct数据,即自定义的数据结构.比如: struct edge { int u; int v; int w; }; 题目给了一组数据,用edge储存.需要按照w大小排序.我 ...

  6. CF576E Painting Edges

    首先,有一个很暴力的nk的做法,就是对每种颜色分别开棵lct来维护. 实际上,有复杂度与k无关的做法. 感觉和bzoj4025二分图那个题的区别就在于这个题是边dfs线段树边拆分区间.

  7. 使用与不使用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  8. NOJ-1581 筷子 (线性DP)

    题目大意:有n支筷子,已知长度,定义一双筷子的质量等于长度的平方差,问能否分成k双?若能,输出所有筷子的最小质量和. 题目分析:先将筷子按长度从小到大排序,定义状态dp(i,j)表示将前 i 支筷子分 ...

  9. Shell脚本的学习(一)

    Shell脚本的学习(一) 一)代码式shell脚本简介 1.下载 Xshell 5 建一个文件夹 mkdri home/data ; 1)查看一个在data里建一个1.sh 查看是否建立成功. 2) ...

  10. Intel DAAL AI加速 ——传统决策树和随机森林

    # file: dt_cls_dense_batch.py #===================================================================== ...