2014.08.04
两个表引用的时候一定要引用主键
数据的软删除,真正项目中一般不要真正delete掉,而是将数据表中加一个字段isDeleted
真正项目中,数据库一般都是随着项目会改变的,表会增加字段。
<appSetings>里面存取数据。
asp.net路线
互联网开发(全网访问) 管理系统开发(内部访问)(技术没有什么区别)
只是大多数中小型系统对技术要求不高
.net是类库是工具。
Chrome调试开发工具好,支持好。
页面中的图片,脚本等都需要服务器来返回给浏览器。需要多次交互。
HttpHander:ProcessRequest()
vs2010有内置web服务器,默认是没有使用IIS服务器。
<form action='' method='get'><input name=''><input type='submit'>,
提交只能input textarea select这三种标签的value值 如果是相同的name那么提交的回事字符串相加。
2014.08.05
get会把参数放入地址栏中post请求将表单值隐藏到http报文中以formData的形式把数据传输出去。
get有长度限制,post无法通过url在其他用户中还原。
http协议,是server与browser传输使用的协议。不保持连接。(网游需要长
连接)请求:标头,正文。(socket报文)响应:标头,正文。
响应200 302 404 500
code=html.replace("{username}",username)
模板引擎Nvelocity.dll,可以将htm放在单独目录下面由美工处理。可以将对象传到htm中
2014.08.06
模板文件:CommonHelper.cs
RenderHtml(string templates,object data)用data数据填充templateName模板,渲染生成html返回,
这个data一般不要是datatable,要传dt.Rows,用来foreach遍历。
#foreach($person in $Data) $person.Name(数据和界面分离)
增删改查模板页:PersonList.htm,PersonEdit.htm(add的展示保存,edit
的展示保存,要存放隐藏按钮提交参数)
Person.Edit.ashx
- - - - - - - - - - - - - - -
DateGrid:拒绝自动
IsReadOnly="true"
AutoGenerateCOlumns="false"
CanUserAddRows="falsse"
<Colunms><DataGridTextColumn IsReadOnly="false" Binging="{binding
Gender}"></Columns>
2014.08.08
状态传递:http是无状态的,要另外把数据保存传递。
两页面最好的数据的传递方式是url,但是不保密。
状态信息尽量不要保存在隐藏字段中,会加大网站流量,降低访问速度,不安全。
url和表单传递数据,不自由。可用cookie,cookie存在客户端本地硬盘中,
只有自身网站可以读取。浏览器每次请求该网站都会把cookie以报文形式发送
给服务器。
写cookieresponse.SetCookie(new HttpCookie("Age","33"))
读取request.Cookies["Age"].value
cookie不能跨不同浏览器。几k的大小限制。
cookie生命周期是浏览器的生命周期,重启就自动删除了。
cookie1.Expires=DateTime.Nw.AddHours(3),可以设置过期时间。
cookie记住用户名。
若要存储稍微机密的数据,可以保存一个Guid带Cookie中,服务器中建立一个
以Guid为Key,复杂数据位Valuede 的全局Dictionary,放到Application中。
用户可以直接修改cookie的值。
static在.net f运行时一直存在。
private static Dictionary<Guid,string> account=new
Dictionary<Guid,string>
secction机制,实际上是用了cooke存了一个guid键名在客户端,把数据存到server中。
不同的浏览器是不同的键cokkie
Context.Session["name"]=username;
session自动销毁机制,防止访问很大是占用过多内存
2014.08.11
AJAX
<input type="hidden" name="IsPostBack" value="true">
bool isPostBack=Convert.ToBoolean(Request["IsPostBack"])如果是TRUE的
话就是提交了页面。提交页面后要重新定向页面。
AJAX:js中创建XMLHTTPRequest对象来想server发出请求,并返回数据。
不同的IE创建xmlHttp的方法不同。xmlhttp.open("post","zan.ashx?
action=zan",true)准备工作。
ajax异步的并不是等到server返回才继续指向。xmlhttp.readystate==4表示
服务器返回数据,xmlhttp.status==2表示成功,xmlhttp.responsetext
封装ajax代码:
function ajax(url,onsuccess){onsuccess(xmlhttp.responsetext)}
执行js:ajax("...",function(resText){...})
相对路径是根据浏览器来看的,访问的是viewvidio.ashx这个页面。string html=CommonHelper.RenderHtml("video.htm",null);context.Response
(html);(渲染htm页面) video.htm这个页面浏览器是不知道的。路径是根据ashx这个路径来判断的。
ajax检查用户名:
οnblur="checkUserName"
ajax("CheckuserName.ashx?username=li",function(resText){if
(resText=="ok"){...}})
ashx页面中返回resText,
context.Response.Write("ok")
Json
ajax服务器端需返回很复杂的数据。ajax规定了数据传输标准Json,xml格式的文档太大,要尽量降低网络流量。
json讲数据简化体积更小,传递结构化话数据。
List<person> list=new List<person>()'list.add(new person{name="li",age=22});list.add(new person
{name="li",age=22});
要引用这个类。
JavaScriptSerializer jss=new JavaScriptScrializer();
string json=jss.serialize(list);生成的是{{"name":"li","age":22},{}}
json字符串可以转换成js对象,使用json.parse;(ie67没有,可印用json.js)
var p=json.parse(tesText);
for(var i=0;i<p.lenth,i++){var per=person[i];alert(p.name)}
2014.08.12
练习无刷新评论ajax,需用到js动态创建html元素。
网站安全。
客户端不可信!
修改url参数可以直接向服务器发请求,跳过客户端js校验。使用post的会,写个socket程序照样可以跳过客户端校验向服务器发送报文。
必须进行服务器端校验。
默认asp.net4.0会对请求数据进行校验。(跨站脚本攻击XSS)不允许在提交数据中加html标签。
需加ValidateRequest="false"或者<systerm.web>中把asp.net改为2.0。
可视化编辑器CKEditor:/js/ckeditor放入源文件
<textarea name="msg" id="editor"></textarea>
JSONload: CKEDITOR.replace(doc.getbyID("editor"))会把textarea变成编
辑器。提交给服务器的是html内容。
编辑器探秘:js在客户端浏览器动态生成了很多东西