文件、新建网站自动生成一个文件夹和三个文件
Page对象:页面执行期内
Request对象:页面请求期
属性:Get请求发送的数据QueryString、Post方法发送的数据Form、环境变量ServerVariables、以上三种方法的集合Params
Request.ServerVariables[“HTTP_USER_AGENT”]获取当前客户端浏览器的版本;
Request.ServerVariables[“HTTP_ACCEPT_LANGUAGE”]获取当前客户端浏览器使用的语言;
页面传值
页内数据传递:
if(!Page.IsPostBack){ 赋值}
跨页数据传递:
目的:if(Page.PreviousPage != null)
If(PreviousPage .IsCrossPagePostBack)
{ PreviousPage.Findcontrol(“控件ID”); 取值}
Response对象:页面执行期
方法:
Write()
End()
Redirect()
Server对象:
方法:
HtmlEncode () 、
HtmlDecode () 、
MapPath () 、
UrlEncode () 、
UrlDecode () 、
Execute () 、
Transfer ()
Application对象:整个应用程序运行期
属性:All、AllKeys、Count、Item
方法:Add()、Clear () 、Get () 、Set () 、Lock () 、UnLock ()
Session对象:用户会话期
属性:SessionID、Timeout、IsNewSession
方法:Clear () 、Abandon ()
Cookie对象:保持客户端的共享信息方式
新建
HttpCookie co = new HttpCookie(“cook”);
co[“name”] = value;
co[“time”] = value;
co.Expires = DateTime.Now.AddDays(3);
Response.Cookies.Add(co);
取值
HttpCookie co = Request.Cookies[“cook”];
co[“name”] ;
co[“time”] ;
控件分类:HTML服务器控件、Web服务器控件
HTML服务器控件
HTML标签,在ASP中称为HTML控件,服务器不处理
可以转换为HTML服务器控件
在HTML控件上加上runat=“server”属性,都可以转换
Web服务器控件
以
所有的HTML服务器控件位于System.Web.UI.HtmlControls命名空间中
所以的Web服务器控件位于System.Web.UI.WebControls命名空间中
Label控件
属性:ID、Text、Visible、ForeColor
Button控件
属性:Text、PostBackUrl
事件:Click
TextBox控件
属性:AutoPostBack、Text、TextMode、Wrap
事件:TextChanged
站点地图 Web.sitemap
XML格式
根节点siteMap
一个站点地图只能有一个siteMap元素
siteMapNode对应于页面的节点,一个节点描述一个页面
title描述页面
url文件在解决方案中的位置
description说明性文本
Web.sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="首页" description="">
<siteMapNode url="BookList.aspx" title="图书浏览" description="" />
<siteMapNode url="Cart.aspx" title="购物车" description="" />
<siteMapNode url="Search.aspx" title="图书搜索" description="" />
<siteMapNode url="" title="用户管理" description="" >
<siteMapNode url="~/Membership/UserRegister.aspx" title="用户注册" description="" />
<siteMapNode url="~/Membership/UserLogin.aspx" title="用户登录" description="" />
siteMapNode>
siteMapNode>
siteMap>
SiteMapPath控件 面包屑导航
PathSeparator ParentLevelsDisplayed
TreeView导航控件
TextField NavigateUrlField
Menu控件
静态显示的级数StaticDisplayLevels、支持的最多级别数MaximumDynamicDisplayLevels、布局类型Orientation
网页典型布局
栏式结构
区域结构
母版页的特点
有利于站点的修改与维护,降低开发人员的工作强度
提供高效的内容整合能力
有利于实现页面布局
提供一种便于利用的对象模型
Html页面加内容
首行:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
可编辑区
<asp:ContentPlaceHolder ID="cphContent" runat="server"> asp:ContentPlaceHolder>
将现有页改为母版页
在@Page标记中指定MasterPageFile位置
去除多余的html标签
去除form标记
创建asp:ContentPlaceHodler标签,并放入对应的内容
指定相应的ContentPlaceHolerID
母版在不同层级使用时图像路径问题
在配置文件
<appSettings>
appSettings>
在全局变量、接收配置文件
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
this.Application.Lock();
this.Application["webRoot"] = ConfigurationManager.AppSettings["webRoot"];
this.Application.UnLock();
}
在母版
Images/index-top.jpg“>
Global.asax
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
this.Application.Lock();
this.Application["webRoot"] = ConfigurationManager.AppSettings["webRoot"];
this.Application.UnLock();
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
</script>
三层
数据访问层
业务逻辑层
表示层
三层的优势
适应变化、利于维护
适用协作开发
主流趋势
模型层
项目的命名
实体类:传递数据的载体
实体类标识为[可序列化的][Serializable]
类的命名规范、数据表名、单数
外键处理方式、主键表对应的实体类型(外键对象)
数据访问层
项目的命名
CRUD:Create、Retrieve、Update、Delete
DBHelper类
DBHelper.cs
public static readonly string CONSTR = ConfigurationManager.ConnectionStrings["SQL_CONSTR"].ConnectionString;
private static SqlConnection CreateConnection(string connectionString)
{
SqlConnection con = new SqlConnection(connectionString);
con.Open();
return con;
}
public static int ExcuteCommand(string connectionString, string sql, SqlParameter[] values)
{
using (SqlConnection con = CreateConnection(connectionString))
{
SqlCommand command = new SqlCommand(sql, con);
if (values != null) command.Parameters.AddRange(values);
return command.ExecuteNonQuery();
}
}
public static SqlDataReader GetReader(string connectionString, string sql, SqlParameter[] values)
{
SqlCommand command = new SqlCommand(sql, DBHelper.CreateConnection(DBHelper.CONSTR));
if (values != null) command.Parameters.AddRange(values);
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
public static object GetScalar(string connectionString, string sql, SqlParameter[] values)
{
using (SqlConnection con = CreateConnection(connectionString))
{
SqlCommand command = new SqlCommand(sql, con);
if (values != null) command.Parameters.AddRange(values);
return command.ExecuteScalar();
}
}
数据绑定的两种方式
编码指定数据源
指定数据对象
数据绑定控件ID.DataSource = 类.方法();
数据绑定控件ID.DataBind();
指定数据源ID
数据绑定控件ID.DataSourceID = 数据源控件ID ;
使用数据源控件
数据绑定的两种方法
Eval方法
Eval是只读的方法(单向数据绑定),不想让用户修改的数据用它。
<%# Eval(“ISBN”).ToString().Trim() %>
Eval有一个重载的方法,可以实现格式化Eval(“date”,”{ 0 : dd / MM / yyyy}”)
Bind方法
Bind支持读/写更能(双向数据绑定),该方法常与输入控件一起使用,如TextBox控件
<%# Bind(“Title’) %>
显示一个列表(ObjectDataSource)
将GridView控件拖入页面,新建数据源,选择业务类,选择对应的Select方法
分页:设AllowPaging为ture
外键列的处理:<%# Eval(“CategoryId.Name”) %>
CategoryId是实体类中的外键类型字段,Name是实体类对应的数据表中的外键列对应的主键表中的Id的Name。CategoryId.Id是外键列中的实际值。
删除
设定Delete×××ByID(int id)的删除方法?
从代码中删除一句 OldValuesParameterFormatString="original_{0}“
设定GridView的DataKeysName为id,启用删除,就能使用删除了,别忘了处理主外键关系
GridView中行的DataKeysName与取值
DataKeyNames=“FID”?? 绑定一个值
GridView1.DataKeys[e.Row.RowIndex].Value.ToString();
DataKeyNames=“FID,FName”?? 绑定两个值
GridView1.DataKeys[e.Row.RowIndex].Values[0].ToString();
GridView1.DataKeys[e.Row.RowIndex].Values[1].ToString();
<asp:TemplateField HeaderText="出版社" SortExpression="PublisherId">
<EditItemTemplate>
<asp:DropDownList ID="ddlPublisher" runat="server" DataSourceID="odsPublisher" DataTextField="Name"
DataValueField="Id" Width="219px" SelectedValue='<%# Eval("PublisherId.Id") %>'>asp:DropDownList>
<asp:ObjectDataSource ID="odsPublisher" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetAllPublisher" TypeName="Accp.BLL.PublisherManager">asp:ObjectDataSource>
EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("PublisherId") %>'>asp:TextBox>
InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("PublisherId.Name") %>'>asp:Label>
ItemTemplate>
asp:TemplateField>
非外键的,处理如下(三个模版中绑定的内容相同) :
<asp:TemplateField HeaderText="标题" SortExpression="Title">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Title") %>' Width="345px">asp:TextBox>
EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Title") %>'>asp:TextBox>
InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Title") %>'>asp:Label>
ItemTemplate>
asp:TemplateField>
在业务逻辑层写更新方法
配置数据源的UpdateMethod
和非外键的UpdateParameters
<UpdateParameters>
<asp:Parameter Name="title" Type="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="publishDate" Type="DateTime" />
<asp:Parameter Name="toc" Type="String" />
<asp:Parameter Name="id" Type="Int32" />
UpdateParameters>
外键的,在DetailsView1_ItemUpdating方法写:
if (this.DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
DropDownList ddlPublisher = this.DetailsView1.FindControl("ddlPublisher") as DropDownList;
if (ddlPublisher != null)
{
this.odsBook.UpdateParameters.Add("publisherId", ddlPublisher.SelectedValue);
}
}
业务逻辑层更新方法
public static int ModifyBook(string title, decimal unitPrice, int publisherId, DateTime publishDate, string toc, int id)
{
Book book = BookService.GetBook(id);
book.Title = title;
book.UnitPrice = unitPrice;
book.PublisherId.Id = publisherId;
book.PublishDate = publishDate;
book.TOC = toc;
int result = BookService.UpdateBook(book);
return result;
}
BoundField 显示普通文本
DataFormatString属性,设置显示格式,需设HtmlCode属性为false
TemplateField 模版,灵活,直接添加、转换而来
HeaderTemplate
FooterTemplate
ItemTemplate
AlternatingTemplate
EditItemTemplate
Buttonfield 按钮,通过CommandName设置命令
CommandField 创建命令按钮,自动生成命令
HyperLinkField 将绑定的数据以超链接的形式显示
ImageField 绑定图片路径,在表中显示图片列
CheckBoxField 显示bool类型的数据
使用JavaScript、CheckBox
<asp:CheckBox onclick="setSelectAll(this);" />
function setSelectAll(obj)
{
var boxes=document.getElementsByTagName("input");
for(var i=0;i<boxes.length;i++)
{
if (boxes[i].type=="checkbox")
{
boxes[i].checked=obj.checked;
}
}
}
取值
string ids = String.Empty;
foreach (GridViewRow row in this.GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox box = row.FindControl("cbSelect") as CheckBox;
if (box != null && box.Checked)
{
string key = this.GridView1.DataKeys[row.RowIndex].Value.ToString();
ids = String.IsNullOrEmpty(ids) ? key : ids + "," + key;
}
}
}
光棒效果
GridView的行绑定事件RowDataBound()
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "currColor = this.style.backgroundColor;this.style.backgroundColor='#6699ff';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = currColor;");
}
RequiredFieldvalidator必须填字段验证器
ControlToValidate
Text
ErrorMessage
CompareValidator范围验证器
ControlToValidate
ControToCompare
Type
Operator
ValueToCompare
RangeValidator范围验证器
ControlToValidate
MaximumValue
MinimumValue
Type
RegularExpressionValidator正则表达式验证器
非负整数 ^\d+$
正整数 1* [0-9] [0-9 ]*$
中文字符 [\u4e00-\u9fa5]
双字节字符(包括汉字在内) [^\x00-\xff]
货币(非负数) \d+(.\d\d)?
货币(整数或负数)(-)? \d+(.\d\d)?
CustomValidator自定义验证器
ControToValidate
ClientValidationFunction
OnServerValidate
ValidationSummary验证摘要
ShowMessageBox
ShowSummary
日期输入
Calendar控件、日历
SelectedDate属性
VisibleDate属性
TitleFormat属性
SelectionChanged事件
缺陷:每次日历的显示、隐藏、用户的选择日期都会造成循环
JS版日历
My97DatePicker
在使用该日期控件的文件中加入JS库(仅这一个文件即可,其他文件会自动引入,请勿删除或改名)
代码如下
οnfοcus=“new WdatePicker(this,’%Y-%M-%D’,true,‘default’);”
FileUpload控件、上传文件。 onchang=“checkImg(this)” js控制上传文件的格式
DetailsView1_ItemUpdated() //将选择的图片上传到服务部
if (this.DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
FileUpload fileUpload = this.DetailsView1.FindControl("FileUpload1") as FileUpload;
if (fileUpload.PostedFile != null && fileUpload.PostedFile.FileName.Length > 0)
{
string path = "~/BookCovers/";
string isbn = this.DetailsView1.Rows[5].Cells[1].Text;
path = path + isbn + ".jpg";
fileUpload.SaveAs(this.Server.MapPath(path));
}
}
MultiView控件、多视图
为View控件提供容器
ImageMap控件、热点区域
ImageUrl
图片地址
HotSpotMode
获取或设置菜单热点区域的默认行为方式。分为设置(NotSet)、定向操作(Navigate)、回转操作(PostBack)、无任何操作(Inactive)4种方式
HotSpots
设置HotSpot对象集合。HotSpot是一个抽象类,它包括CircleHotSpot(圆现热区)、RectangleHotSpot(方形热区)、PolygonHotSpot(多边形热区)三个子类
HyperLink 控件
基于超链接的一个扩展,便于动态的改变链接的地址
NavigateUrl 设置或获取超链接所指向的URL地址
ImageUrl 可设置为图片形式的链接
Text 要为该链接显示的文本
属性
RepeatDirection项的分布方向
RepeatColumns要用于该布局的列的数目
模版
项模版 ItemTemplate(放一表格进去)、AlternatingItemTemplate、SelectedItemTemplate、EditItemTemplate
页眉页脚 HeaderTemplate、FooterTemplate
分割符模版 SeparatorTemplate
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.PageSize = 3;
this.CurrentPageIndex = 1;
this.Order = "Id";
this.FillPageData();
}
}
protected void FillPageData()
{
PageResult<Book> pageResult = new PageResult<Book>();
pageResult.PageSize = this.PageSize;
pageResult.CurrentPageIndex = this.CurrentPageIndex;
pageResult.Order = this.Order;
pageResult = BookManager.GetBookByPage(pageResult);
this.DataList1.DataSource = pageResult.Data; //代码绑定数据源
this.DataList1.DataBind();
}
基于SQL语句分页:pageSize=3 currentPageIndex=3
在模板层,建立一个分页类PageResult
private int pageSize = 3;
private int currentPageIndex = 1;
private int recordCount = 0;
private string order = "Id";
private List<T> data = new List<T>();
在表示层,建立分页属性
protected int PageSize
{
get { return Convert.ToInt32(this.ViewState["pageSize"]); }
set { this.ViewState["pageSize"] = value; }
}
protected int CurrentPageIndex
{
get { return Convert.ToInt32( this.ViewState["currentPageIndex"] ); }
set { this.ViewState["currentPageIndex"] = value; }
}
protected string Order
{
get { return this.ViewState["order"] as string; }
set { this.ViewState["order"] = value; }
}
protected int PageCount
{
get { return Convert.ToInt32 ( this.ViewState["pageCount"] ); }
set { this.ViewState["pageCount"] = value; }
}
ViewState
页面级状态保持变量
表示层,加载第某页数据的方法
protected void FillPageData()
{
PageResult<Book> pageResult = new PageResult<Book>();
pageResult.PageSize = this.PageSize;
pageResult.CurrentPageIndex = this.CurrentPageIndex;
pageResult.Order = this.Order;
pageResult = BookManager.GetBookByPage(pageResult);
this.DataList1.DataSource = pageResult.Data;
this.DataList1.DataBind();
this.PageCount = pageResult.PageCount;
string pageInfo = "第 {0} 页 / 共 {1} 页 记录数:{2}";
this.lblCurrentPage.Text = String.Format(pageInfo, this.CurrentPageIndex, this.PageCount, pageResult.RecordCount);
this.txtCurrentPage.Text = this.CurrentPageIndex.ToString();
}
DAL
public static PageResult<Book> GetBookByPage(PageResult<Book> pageResult)
{
int filter = (pageResult.CurrentPageIndex - 1) * pageResult.PageSize;
string sql1 = "select count(id) from Books";
string sql2 = "select top {0} * from Books where id not in(select top {1} id from Books order by {2}) order by {3}";
sql2 = String.Format(sql2, pageResult.PageSize, filter, pageResult.Order, pageResult.Order);
return GetPageDataBySql(sql1, sql2, pageResult);
}
private static PageResult<Book> GetPageDataBySql(string sql1, string sql2, PageResult<Book> pageResult)
{
pageResult.RecordCount = Convert.ToInt32(DBHelper.ExecuteScalar(DBHelper.ConnectionStringLocalTransaction, CommandType.Text, sql1, null));
List<Book> data = GetBooks(sql2, null);
pageResult.Data = data;
return pageResult;
}
分页类PageResult
[Serializable]
public class PageResult<T>
{
private int pageSize = 3;
private int currentPageIndex = 1;
private int recordCount = 0;
private string order = "Id";
private List<T> data = new List<T>();
public int PageCount {
get {
return this.recordCount % this.pageSize == 0 ? this.recordCount / this.pageSize : this.recordCount / this.pageSize + 1;
}
}
public List<T> Data {
get { return data; }
set { data = value; }
}
public string Order {
get { return order; }
set { order = value; }
}
public int RecordCount {
get { return recordCount; }
set { recordCount = value; }
}
public int CurrentPageIndex {
get { return currentPageIndex; }
set { currentPageIndex = value; }
}
public int PageSize {
get { return pageSize; }
set { pageSize = value; }
}
}
Repeater
不自动生成任何HTML标签,效率高,没有默认的外观,完全通过模版控制,用于精确展示
<div id="clsPage">
<asp:Repeater ID="rptBooks" runat="server">
<HeaderTemplate>
<ul class="clsUL">
<li class="clsLi1">书名li>
<li class="clsLi2">作者li>
<li class="clsLi3">出版社li>
<li class="clsLi4">出版日期li>
<li class="clsLi5">价格li>
ul>
HeaderTemplate>
<ItemTemplate>
<ul class="clsUL1">
<li class="clsLi1"><%# Eval("ShortTitle") %>li>
<li class="clsLi2"><%# Eval("ShortAuthor") %>li>
<li class="clsLi3"><%# Eval("PublisherId.Name") %>li>
<li class="clsLi4"><%# Eval("PublishDate","{0:yyyy-MM-dd}") %>li>
<li class="clsLi5"><%# Eval("UnitPrice","{0:C}") %>li>
ul>
ItemTemplate>
<AlternatingItemTemplate>
<ul class=“clsUL2”> //变换CSS样式
相同
ul>
AlternatingItemTemplate>
asp:Repeater>
div>
<style type="text/css">
body{margin:0px;font-size:12px;text-align:center}
#clsPage{width:960px;text-align:left;}
#clsPage .clsUL{margin:0px;padding:0px;display-style:none;}
#clsPage .clsUL .clsLi1{width:300px;float:left;line-height:30px;height:30px;font-weight:bold;}
#clsPage .clsUL .clsLi2{width:300px;float:left;line-height:30px;height:30px;font-weight:bold;}
#clsPage .clsUL .clsLi3{width:160px;float:left;line-height:30px;height:30px;font-weight:bold;}
#clsPage .clsUL .clsLi4{width:100px;float:left;line-height:30px;height:30px;font-weight:bold;}
#clsPage .clsUL .clsLi5{width:100px;float:left;line-height:30px;height:30px;font-weight:bold;}
//float控制不换行
#clsPage .clsUL1{margin:0px;padding:0px;display-style:none;}
#clsPage .clsUL1 .clsLi1{width:300px;float:left;line-height:25px;height:25px;}
#clsPage .clsUL1 .clsLi2{width:300px;float:left;line-height:25px;height:25px;}
#clsPage .clsUL1 .clsLi3{width:160px;float:left;line-height:25px;height:25px;}
#clsPage .clsUL1 .clsLi4{width:100px;float:left;line-height:25px;height:25px;}
#clsPage .clsUL1 .clsLi5{width:100px;float:left;line-height:25px;height:25px;}
#clsPage .clsUL2{margin:0px;padding:0px;display-style:none;}
#clsPage .clsUL2 .clsLi1{width:300px;float:left;line-height:25px;height:25px;background-color:#cccccc}
#clsPage .clsUL2 .clsLi2{width:300px;float:left;line-height:25px;height:25px;background-color:#cccccc}
#clsPage .clsUL2 .clsLi3{width:160px;float:left;line-height:25px;height:25px;background-color:#cccccc}
#clsPage .clsUL2 .clsLi4{width:100px;float:left;line-height:25px;height:25px;background-color:#cccccc}
#clsPage .clsUL2 .clsLi5{width:100px;float:left;line-height:25px;height:25px;background-color:#cccccc}
style>
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
List<Book> lst = BookManager.GetBookByCategoryId(25);
this.rptBooks.DataSource = lst;
this.rptBooks.DataBind();
}
}
RSS
Really Simple Syndication
简易信息聚合
RSS发布就是提供一个Feed格式的文件,Feed文件就一个XML格式的文件
Repeater控件可以轻松实现数据的绑定,又不会生成任何无用的代码,非常适合用于RSS的发布
后置代码
public string GetUrl(object id)
{
return "http://" + this.Request.ServerVariables["HTTP_HOST"].ToString() + "/Web/BookDetail.aspx?bid=" + id;
}
利用Repeater在页面循环生成Feed文件
<%@ Page Language="C#" AutoEventWireup="true" ContentType="text/xml" CodeFile="Rss.aspx.cs" Inherits="Rss" %>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="odsBook">
<HeaderTemplate>
<rss version="2.0">
<channel>
<title>第三波书店title>
<link>www.accpsky.cnlink>
<description>第三波网上书店description>
<copyright>Copyright 2009-2010 by zhlbcopyright>
HeaderTemplate>
<ItemTemplate>
<item>
<title><%# Eval("Title") %>title>
<author><%# this.Server.HtmlEncode(Eval("Author") as string) %>author>
<description><%# this.Server.HtmlEncode(Eval("ContentDescription") as string)%>description>
<link><%# GetUrl(Eval("Id")) %>link>
<pubDate><%# Eval("PublishDate","{0:D}") %>pubDate>
item>
ItemTemplate>
<FooterTemplate>
channel>
rss>
FooterTemplate>
asp:Repeater>
<asp:ObjectDataSource ID="odsBook" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetBookByCategoryId" TypeName="Accp.BLL.BookManager">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="25" Name="CategoryId" QueryStringField="cid"
Type="Int32" />
SelectParameters>
asp:ObjectDataSource>
public string ShortContentDescription
{
get
{
return this._contentDescription.Length > 150 ? this._contentDescription.Substring(0, 150) + “……" : this._contentDescription;
}
}
富文本框控件
FreeTextBox
FCKeditor
RichTextBox
验证码控件
Webvalidates
生成验证码snCode.Create();
验证snCode.CheckSN(输入的内容); 返回值为bool
代码生成器CodeSmith
分页控件AspNetPager
用户控件
Web用户控件,后缀.ascx
系统控件与自编代码的联合体
拖放.ascx文件,到其它页面,实现重用。
.ascx文件,不能单独使用
用户控件,可以包含其它用户控件,不能(嵌套)包含自己
HttpModule
Http请求的必经之路
可以附加信息、做一些额外的工作、终止一个请求,起Filter的作用
HttpHandler
Http请求的真正处理中心
数字水印:指定Handler方式
HttpHandler程序:一般处理程序,后缀.ashx
public class BookCover : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "image/jpeg";
//加水印代码
}
public bool IsReusable {
get {
return false;
}
}
}
页面中访问图片的路径修改为:
BookCover.ashx?ISBN=数字
数字水印:全局Handler方式
修改配置文件
<system.web>
<httpHandlers>
<add verb="*" path="*.jpg" type="CoverHandler"/>
httpHandlers>
system.web>
在App_Code目录底下创建Handler类CoverHandler.cs
public class CoverHandler : IHttpHandler {
private readonly string DEFAULTURL = "~/Images/default.jpg";
private readonly string WATERURL = "~/Images/WaterMark.jpg";
public void ProcessRequest(HttpContext context) { //一个请求的所有信息
Image imgCover = null; //新建一个图象,用于代替原图,作为封面显示
Image imgWater = Image.FromFile(context.Server.MapPath(WATERURL)); //水印图象
if (File.Exists(context.Request.PhysicalPath)) { //如果原图象存在
imgCover = Image.FromFile(context.Request.PhysicalPath); //把原图象赋给封面
Graphics g = Graphics.FromImage(imgCover); //获取封面图片的画笔
g.DrawImage(imgWater, imgCover.Width - imgWater.Width, imgCover.Height - imgWater.Height, imgWater.Width, imgWater.Height); //往封面上面画水印
g.Dispose(); //释放资源
imgWater.Dispose(); //释放资源
}
else
{
imgCover = Image.FromFile(context.Server.MapPath(DEFAULTURL)); //默认图象做封面
}
context.Response.ContentType = "image/jpeg";
imgCover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.Flush(); //向客户端发送当前所有缓冲的输出
imgCover.Dispose(); //释放资源
context.Response.End(); //结束请求
}
}
加密:
aspnet_regiis.exe –pef section physical_directory –prov provider 或
aspnet_regiis.exe –pe section –app virtual_dirctory –prov provider
section 指定表示要加密的配置节
physical_directory 指定站点的物理路径
virtual_dirctory 指定虚拟路径
provider 指定加密提供程序DataProtectionConfigurationProvider
解密
aspnet_regiis.exe –pdf “connectionStrings” “路径”
站点根目录写入Web.config
<system.web>
<authentication mode=“Forms”> //身份验证
<forms name="book_userName" loginUrl="~/Admin/AdminLogin.aspx" timeout="60">
<credentials passwordFormat="Clear"> credentials>
forms>
authentication>
system.web>
受保护文件根目录Admin写入Web.config
<system.web>
<authorization> //授权
<deny users=“?”/> //拒绝匿名用户
authorization>
system.web>
登录
if (登录方法,数据库合法用户)
{
this.Session[“currUser”] = currUser; // 保存登录状态
FormsAuthentication.SetAuthCookie(this.txtLoginId.Text, true); //发票证
string returnUrl = this.Request.QueryString["ReturnUrl"] as string;
if (String.IsNullOrEmpty(returnUrl)) //判断登录前是否有请求页
{
this.Response.Redirect(“~/Admin/ManageAllUser1.aspx”); //默认页
}
else
{
this.Response.Redirect(returnUrl); //转向登录前请求页
}
}
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="~/error/DefaultError.aspx">
<error statusCode="404" redirect="~/error/404.aspx" />
<error statusCode="500" redirect="~/error/500.aspx" />
customErrors>
system.web>
mode
On 启用
Off 禁用
RemoteOnly 只显示给远程访问
appSettings 应用程序设置
作者、网站图片路径、数据库类型
connectionStrings 连库字符串
连库字符串
自动附加数据库connectionString=“server=。;AttachDbFileName=|DataDirectory|NorthWnd.mdf;uid=sa;pwd="
system.web 配置文件(默认的配置设置)以下所有的代码都应该放入其中
httpRuntime
配置 ASP.NET HTTP 运行库设置
enable 程序启用状态
executionTimeout 程序执行时间上限
maxRequestLength 上传内容最大限制
pages 标识特定于页的配置设置
如是否启用会话状态、视图状态,是否检测用户的输入等
该项默认是检测,如果你使用了不检测,一要对用户的输入进行编码或验证
compilation 是否允许调试
authentication 身份验证
Windows
Form
Passport
None
customErrors
为 ASP.NET 应用程序提供有关自定义错误信息的信息。不适用于 XML Web services 中发生的错误
<configuration>
<appSettings>
<add key="author" value="zhlb" />
<add key="WebRoot" value="/Web/"/>
appSettings>
<connectionStrings>
<add name="SQLConnString1" connectionString="Server=.;Database=MyBookShop;uid=sa;pwd=" />
connectionStrings>
<system.web>
<httpRuntime enable="true" executionTimeout="90" maxRequestLength="4096"/>
<pages validateRequest="false" />
<compilation debug="true"/>
<authentication mode="Forms">
<forms name="book_userName" loginUrl="~/Admin/AdminLogin.aspx" timeout="60">
<credentials passwordFormat="Clear">
credentials>
forms>
authentication>
<customErrors mode="RemoteOnly" defaultRedirect="~/error/DefaultError.aspx">
<error statusCode="404" redirect="~/error/404.aspx" />
<error statusCode="500" redirect="~/error/500.aspx" />
customErrors>
system.web>
configuration>
只影响同级与下级,下级有配置文件的适用就近原则
路径,.netframework版本不同则目录不同,以2.0为例
c:\Windwos\Microsof.NET\Framework\v2.0…\CONFIG
Win2003服务器 Framework版本V2.0…
Web站点管理工具
打开:IDE的网站菜单下的ASP.NET配置
4个选项卡:主页、安全、应用程序、提供程序
侵入式
MMC ASP.NET插件
打开:ASP.NET站点属性的编辑配置
非侵入式
准备
在web.config中关闭调试功能
使用Release(发行版)的方式编译应用程序
发布预编译站点
又叫部署预编译
选项
允许更新预编译站点
使用固定命名和单页程序集
对预编译程序集启用强命名
本地预编译,打包上传
<%@ 表示:引用
<%= 表示:取值
<%# 表示:绑定
<%= 变量名%>
<%# 要绑定的字段名%> 或者 <%# 调用后台的方法名%>
<%%> <%%>可以加入判断语句或代码
<%$ %>? 这个只能用在取Web.config的连接字符串
0-9 ↩︎