*********************2015-06-09 图书商城项目1*********************
1、微软中如果注明是线程安全的,就证明多线程访问安全(不需要加锁)
2、
前台:就是游客、用户注册登录后能够看到的页面。
后台:提供给系统管理者能够看到的页面,而游客、用户看不到的页面。
前端:程序员在进行编程的时候的代码编写,如果是三层构架,就是UI层。
后端:对应前端而言的,编写代码基本上是提供给前端调用,是不需要处理UI的内容.比如:逻辑层。
3、jquery中可以使用css属性,对对象进行样式的修改
4、使用ajax将表单元素序列化成键值对json,传送给服务器
*********************2015-06-09 图书商城项目2*********************
1、表单中的元素无论是否服务端控件,都可以被提交(submit),
2、无刷新上传图片异步jQuery
3、使用jquery的方式,修改标签的某个属性值
5、服务器返回图片的路径给客户端,只需要返回图片的服务器绝对路径即可,不用物理路径,客户端会进行解析为http路径
①服务器返回图片绝对路径,会在客户端当前网页的缓存地址中构建:/imageUpload/xxx.jpg文件, 然后客户端获取该图片
②客户端接收服务器,图片路径并显示
6、使用前端或客户端插件的时候,可以不将插件的资源文件进行分类,这样比较好管理
7、img标签只有起始标签
8、可以使用hiddenField将服务器数据传送到客户端:
①服务器设置要传送的属性
②写到hidden中
9、前台与后台代码混编,只要将后台代码用<% %>全部包起来,跟正常语句一样,只是前台代码不用包
10、iquery的css处理
11、①与用户进行交互的控件都选择input控件,如输入文本框、button、CheckBox
②很少使用label,直接写入innerhtml中,③img等控件可以单另使用
④页面表格布局、输入信息等,可以使用table布局
12、使用httpWatch或者网页工具进行请求与响应监视
13、客户端经常要从服务器获取,并且要验证的数据,而且不会改动的,可以放置在缓存中,以免每次查询数据库
①客户端每次修改密码所需要的服务器数据
②使用system.web.caching.cache进行缓存
15、解决高并发,可以使用分布式处理,如使用redis等队列工具,将高并发的事务放置在队列中使用消费者模式进行处理。
16、如果repeater绑定的是modelDataSource,那么Eval的是model的属性名称,而不是数据库中字段名称
17、常用的服务器端控件①repeater,相当于forche,②listeView自带增删改查编辑,功能强大。
18、Eval的第二参数可以设置格式,{0}是占位符:
19、repeater会有viewstate,必要时要进行禁用:
20、对请求管道中的事件,①可以实现一个继承IhttpHandled的类,然后进行配置,②也可以直接使用Global.asax中的方法来实现:
21、如果链接中同时有,href 属性函数和 onclick 事件函数,那到底执行那个呢?
22、aspx的前台页面与后台页面对项目中的资源引用路径是一样的,因为前台页面继承自后台类:
23、图片使用img标签,不是image
*********************2015-06-09 图书商城项目4*********************
1、使用前台代码获取后台代码数值的方式:①#或者= ②如果是如与数据库绑定使用Eval
2、页面模板中的占位符被替换的时候,不光是body中的,只要是页面中的都可以,即使是js中的:下图中的$bookId被替换
3、将list<modle>转化为json字符串,返回
4、split不返回空字符串
5、外部访问的属性一定设置成访问器,不能定义成公共字段(记住字段只为类内服务)
①数据库中的字段
②映射的model,可以没有字段,但是一定有属性(公共访问器)
6、判断数据库bool类型的值,isForbid=1比较通用
6、使用sqlDataReader读取数据的模式:
①在读取数据库一部分少量数据的时候可以使用dataAdapter,可以读取到table中(内存中),
②但是读取大量数据的时候,使用sqlDataReader比较快!
*********************2015-06-09 图书商城项目5*********************
1、数据访问层Dal中服务器数据库的处理(所有逇sql语句放置在该层中),manager 业务层(不会出现sql语句与数据库的访问,)
2、Md5对同一个string加密,其结果是一样的,在数据库中存放的密码是经过md加密的,但是用户登录使用的是明文
3、html中的UI可以使用第三方插件,如:jqueryUI、EasyJquery进行设计
将下面的div放置到模态对话框
4、类型强转
5、Eval的书写方式:
①输出方法
②直接输出属性
6、js函数返回值什么类型都可,也不需要每个分支都返回值,如果想中断函数执行直接返回false:
8、使用jquery的类选择器,结果为数组:
9、使用jquery对某类的标签(集合)进行查找、并且遍历:
10、使用jquery可按照:①class名、id、标签类型、或者其的混合进行查找
②Name一般只用在form表单提交到服务器时使用
11、使用隐藏域来保存前台页面的全局临时数据比较好
12、构建一个表的时候,尽可能将跟该表密切相关的属性列出来,然后在考虑其中某些属性是否要拆分成一个新的表(外键表)
13、数据库设计时,如果有公共数据冗余,可以将公共数据抽取作为主表;有变化的部分作为从表(明细表):
15、基本上所有的关系型数据库的Sql语句基本相同,
16、建立存储过程
17、将购物车中的总价、商品、单价分别写入到订单主表、订单明细从表中,使用存储过程:
create proc createOrder
//创建过程参数
@address nvarchar(255),--收货人地址
@orderId nvarchar(50),--订单号
@userId int,--用户编号
@totalMoney money output --总金额 //该参数为输出参数
as
begin
declare @error int //声明变量
set @error=0 //对变量赋值
begin transaction //开启事务
---计算总金额
select @totalMoney=sum([Count]*UnitPrice)from Cart inner join Books on Cart.BookId=Books.Id where Cart.UserId=@userId
set @error=@@error+@error //@@error为上次sql语句执行错误时,系统的报的错误信息
--向订单主表中插入数据。
insert into dbo.Orders(OrderId, OrderDate, UserId, TotalPrice, PostAddress, state) values(@orderId,getdate(),@userId,@totalMoney,@address,0)
set @error=@@error+@error
--行订单明细表中插入数据
// select @orderId,Cart.BookId,Cart.Count,Books.UnitPrice这样可以批量出入数据
insert into dbo.OrderBook(OrderID, BookID, Quantity, UnitPrice) select @orderId,Cart.BookId,Cart.Count,Books.UnitPrice from Cart inner join Books on Cart.BookId=Books.Id where Cart.UserId=@userId
set @error=@@error+@error //每次执行sql后都输出系统错误信息@@error
--删除购物车表中的数据
delete from Cart where UserId=@userId
set @error=@@error+@error
if @error>0 //执行完以上过程后,如果系统错误数大于0,那么就要回滚整个过程!
begin
rollback transaction--回滚
end
else
begin
commit transaction--提交 //否则提交
end
end