首页 > 代码库 > asp.net(class0625)

asp.net(class0625)

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赋值之前,一定要先对DataSourceIDnull

 

如果想在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来找到该控件

 

 

GridViewEditIndex属性:指示当前哪一行处于编辑状态,如果没有任何一行处于编辑状态,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;

                }

 

            }

 

母板页也是一个控件