1 SiteMapPath 面包屑导航控件
要想使用这个控件,必须创建一个站点地图,也就是 web.sitemap
web.sitemap是一个xml文件:
根节点必须是:<siteMap> 并且在根节点下只能有一个<siteMapNode>节点表示网站的首页.在这个<siteMapNode>下面就可以包含多个<siteMapNode>节点了,只需要体现网站结构层次就行了.
<siteMapNode>属性: url 表示该节点所代带的网页地址
title 在SiteMapPath控件上显示的内容
description 鼠标放到节点上,所显示的内容
2 SiteMapPath属性:
PathSeparator 分隔符
ParentLevelsDisplayed 显示几层父节点
如果用动软生成代码后,又在模型层用添加了(修改了)用对象作为属性(外键的处理),而要修改下面3个地主:
数据库访问层:
1 Add方中使用到的该属性
2 updagte方中使用到的该属性
3 GetModel方法中使用到该属性的地方
业务逻辑层
1 DataTableToList方法中使用到该属性的地方
用户输入的年龄必须大于等于18岁
用户注册 用户表 Users
c/s dataGridView在绑定时,只能绑定一层属性
UI:
业务逻辑:
AddUser(User user)
{
首先调用GetUserByUserName(user.name);
AddUser();
数据库访问层:
GetUserByUserName(string userName)
AddUser(User user)
{
对于插入一条记录的这个方法,就只做插入就行了.不需要用 用户名是否存在的判断
}
Delete(string userName)
Update(User user)
数据绑定控件( 通过绑定的方法向用户展示数据):ListView GridView DataList
数据源控件(读取数据,并把数据提供数据绑定控件):ObjectDataSource XmlDataSource
数据绑定有两种方法:
第一种手动写代码绑定:
1) 先控得数据的集合
2) 把集合赋给相关的数据绑定控件的DataSource属性,然后执行该控件的DataBind
第二种使用数据源控件绑定
1) 首先你拖一个数据源控件,如ObjectDataSource
2) 设置数据绑定控件(GridView)的DataSourceID为相关的ObjectDatasource
注意:以上两种绑定方式不能同时使用(一个控件不能即对DataSource赋值,又对DataSourceID赋值),如果我们先给控件赋了一个DataSourceID,在用户点击某一个按钮后又想使用手写代码绑定,那么在对DataSource赋值之前,一定要先对DataSourceID赋null
如果想在GridView隐藏一列的值(比如主键),那么请添加一个模板列,然后在这个模板列中放一个Label,然后就可以隐藏这一列了,在后台代码可以通过FindControl来找到隐藏在模板列中的Label
在GridView中进行数据绑定时,设置Columns属性指定显示的数据列:
绑定列时有以下几种类型:
BoundField:用于展示某个字段
CheckBoxField:用于展示数据库中的bit类型(实体类中bool),他以一个CheckBox控件给用户展示
RowCommand事件:当控件中有任何控件触发事件的时候,都会触发这个事件.
在GridView中,当一个按钮的CommandName为:
1) Edit的时候,那么点这个按钮,就会触发GridView编辑事件
2) Cancel的时候, 那么点这个按钮,就会触发GridView 取消编辑事件
3) Update的时候, 那么点这个按钮,就会触发GridView 更新编辑事件
4) Delete的时候, 那么点这个按钮,就会触发GridView 删除编辑事件
获取GridView控件上的数据:
1) 如果是BoundField绑定,并且当前未处于可编辑状态:
GridView1.Rows[行索引].Cells[列索引].Text;
2) 如果是BoundField绑定,并且当前处于可编辑状态:就可以通过以下代码获得该控件:
GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0]
获得后,返回值是一个Control类型,你可以从界面上看出其实是TextBox还是CheckBox等控件,然后强转,假如是TextBox就写以下代码:
((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])
3)如果是模板列,通一使用FindControl来找到该控件
GridView的EditIndex属性:指示当前哪一行处于编辑状态,如果没有任何一行处于编辑状态,则EditIndex=-1
向前端输出js代码使用下面两种方法:
1)在显示用户控件前显示
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), Guid.NewGuid().ToString(),
"alert('mydelete');", true);
2) 在显示完用户控件后执行的js脚本 Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(),
"alert('mydelete')", true);
如果想在GridView中绑定一个对象的属性的属性(外键).那么请添加一个模板列,在模板列通过Eval来绑定
使用ObjectDataSource进行数据绑定并且在ObjectDataSource指定了更新的业务逻辑层方法,当用户点击更新时,事件的调用顺序为:
1) 控件的 GridView1_RowUpdating 在这个事件,通过参数e可以得到用户在界面上更新前与更新后的值.当然如果要在这个e中获得值,值的绑定必须是Bind绑定
2) 数据源控件的 ObjectDataSource1_Updating 这时候参数e中存数模型
3) 调用业务逻辑层的方法
4) 数据源控件的ObjectDataSource1_Updated
5) 控件的 GridView1_RowUpdated
在4)和5)的事件,可以判断e.Exception是否为空来知道在调用业务逻辑层时是否出现了异常,如果已处理该异常,不希望些异常继续抛出,需要设置 e.ExceptionHandled = true;
定单表如何设计:
假如说张三买了3本不同名的书
定单表:
Id UserId BookId Count UnitPrce Date state Address
1 zs 1 1 1 2011-06-23 0 海淀软件园
2 zs 2 1 1 2011-06-23 0 海淀软件园
3 zs 3 1 1 2011-06-23 0 海淀软件园
4 ls 2 1 1 2011-06-24 0 保定
5 zs 6 1 1 2011-06-24 0 邯郸
主表中:
单号(主键) 用户id 购买日期 发货地址 总金额 状态(0未发货,1已发货)
0001 zs 2011-06-23 北京 100 0
明细表(单号和Item做组合键)
单号(外键) item BookId 数量
0001 1 1 1
0001 2 2 1
0001 3 3 1
采用Session来验证用户是否登录.
如果用户登录成功,则把用户的信息存储到Session[“currUser”]
其他页面如何知道当前用户是否登录成功:就判断Session[“currUser”]是否存在就可以了.如果存在,说明已登录,否则说明未登录!
什么时候使用用户控件:
当我们在我们的网站中,重复的用到某一个功能块时,并且这些功能块在各各页面上的位置不同或者各各页面的布局不同,这样就不能使用母板页,可以使用用户控件来实现重用.
用户只能浏览放有用户控件的网页,不能直接浏览用户控件.
用户控件中可以再放用户控件,但一定要注意,用户控件不能嵌套放.
登录实现记住我:
我们需要在用户的电脑上存什么上?
//////用户名和密码
两种解决方法:
第一种:
在数据库的Users表中加一个字段叫akey,当用户点击记住我登录时,产生一个Guid,然后放入数据akey,并把akey写入客户端cookie中.下次只需要读出cookie中的akey,就可以从数据库中查找到该用户.
我有两台电脑:在 A上登录,产生一个akey 在B电脑上登录,并且也选择记住我,又产生一个akey
第二种:
我把用户名和密码存到客户端.
设从数据库中读出的用户的密码为p
随机产生两个字符key
加密密码: key+md5(key+md5(p))
高率分页:
设页大小为 PageSize=10
PageNumber
第1页的数据:1 10
第2页的数据:11 20
第3页的数据:21 30
…
第n页的数据: (n-1)*PageSize+1 n*PageSize
3
select top PageSize * from books where books.id not in
(
select top ((PageNumbe-1)r*PageSize) * from books;
)
select * from
(select *,Row_Number() over(order by id) rownumber from books ) t
where t.rownumber>=@start and t.rownumber<=@end
服务按钮控件有一个PostBackUrl属性,如果不设置这个属性,点击这个按钮默认情况下是回发到本页.如果我们想通过Post的形向其他页面或其他语言写的web提交数据,就可以设置PostBackUrl属为要提到数据的网址.按钮一旦设置了PostBackUrl之后,点击这个按钮就会把当前页面上的数据提交到指定网址.
如果一个按钮设置PostBackUrl属性,那当我们当击这个按钮时,这个按钮的服务器端事件的代码不会立即触发.
当在跨页提交的这个页中代码,第一次访问到Page.PreviousPage属性时,会转交上一个页面,执行上一个执行的按钮事件.
跨页面取值时用以下代码:
if (Page.PreviousPage != null)
{
if (Page.PreviousPage.IsCrossPagePostBack == true)
{
Label1.Text= ((TextBox)Page.PreviousPage.FindControl("TextBox1")).Text;
}
}
母板页也是一个控件