一、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,响应速度也应该快点吧:)
二、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); });
三、动态控制颜色
<td align="center" style='color:<%# Container.ItemIndex == 0 ? "green":"red"%>'>
四、CheckBoxList动态绑定数据、CheckBox设置间距
前端:
<asp:CheckBoxList ID="chklSellChannelID" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow"></asp:CheckBoxList>
后端:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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选中的判断:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
ListItem _list; foreach (var ctl in chklSellChannelID.Items) { if (ctl is ListItem) { _list = (ListItem)ctl; if (_list.Selected == true) { } } }
五、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>