在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一章: 1.代码后置(CodeBehind)好处:代码和页面内容分离,使代码更清晰 2.控件的可拖移:选中控件-->菜单-->布局-->位置-->绝对定位 3.打开"服务器资源管理器":视图-->服务资源管理器 (可以连接数据库) 4.有分页功能的数据展示控件:GridView、DetailView 作添加功能时,如果直接连数据库,拉入DetailView 要更改属性DefaultMode为Insert 5.放在App_Code中的文件是全局文件 6.控件的AutoPostBack属性在使用DropDownList控件如果需要数据随下拉框的值更改时改变时,需要将此属性设置成true 第二章: 1.数据传递 (1): get获取:Request.QueryString["paraName"] (2): post获取:Request.Form["paraName"] 1: 在一般情况下本页面post到本页面[回传] 判断是首次加载还是回传-----IsPostBack if(!IsPostBack)...页面第一次加载时,执行if里面的代码 2: 跨页跳转 2.1: Button -- PostBackUrl[Click事件不会执行] 跨服务器,相似于Click事件中Response.Redirect(url) 2.2: Server.Excute 不转移控制权, 本页面显示 Url重定向(不跳转到别的页面) 2.3: Server.Transfer 转移了控制权, 本页面不显示(Server.Transfer) 备注: .NET已经对get,post进行了封装 2.状态保持 (1): Session: Session["UserData"] --> Session["UserData_SessionID"] Clear() --> 清空Session,不改变SessionID Abandon() --> 清空Session,改变SessionID,结束当前会话,所有信息消失 (2): Application 定义在全局应用程序类[Global.asax]中的Application_Start (3): Cookie:只能保存文本,可以序列化成xml保存 Response.Cookies[Cookie名称].Value=变量值; 在客户端写入Cookie string 变量名=Request.Cookies[Cookie 名称].Value; 读取客户端Cookie HttpCookie hcCookie=new HttpCookie(Cookie名称,值); //新添加一个Cookie hcCookie.Expires=DateTime.Now.AddYears(1); //新建Cookie 在本机上的保存时间为1年 Response.Cookie.Add(hcCookie); (4): ViewState 页面级别的状态保存--object 序列化---远程传输 缺点:性能低,不安全,一般不用 (5): 用隐藏控件 HiddenField---string (6): 数据库 (7): 文件 (8): 缓存 3.Server A: MapPath -- 得到的是物理路径 应用: 保存文件时一定需要一个完整的物理路径 例如: 网站根目录: D://MySchool 代码: Server.MapPath("~/upFile/ziliao.txt") 返回路径:D://MySchool/upFile/ziliao.txt 4.页面执行顺序 (1):Page_Load (2):验证事件 (3):服务器控件事件 如Button_ click (4):Render html生成事件 //在所有事件执行完毕后再执行该事件 protected override void OnPreRender(EventArgs e) {} 5.获得客户IP地址:Request.UserHostAddress; 获取当前浏览器版本信息:Request.ServerVariables["HTP_USER_AGENT"] 获取当前客户浏览器使用语言:Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"] 6.页面之间的数据传递: protected void Page_Load(object sender, EventArgs e) { if(Page.PreviousPage != null)//当判断时,又会跳转的源页面,执行源页面的代码 if(PreviousPage.IsCrossPagePostBack) this.lblShowURL.Text="您的查询条件为:"+((TextBox)this.PreviousPage.FindControl("txtKeyWord").Text; }//一般不用这种方法,而用 if(Request.Form["txtKeyWord"] != null) this.lblShowURL.Text="您的查询条件为:"+Request.Form["txtKeyWord"]; 第三章: 1.服务器控件 AutoPostBack 自动回发 如果一个对象有 runat="server" 则其是服务器控件 服务器控件必须放在服务器form中,一个页面只能有这一个表单 2.在后置代码中隐藏HTML服务器控件:this.divHead.Style.Add("display","one"); 3.让按钮不作验证:设置按钮的CausesValidation为false 4.ValidationGroup 可使不同的控件在不同的组中,各自不受其它控件事件的影响 5.动态改变母版页 前提条件:所有ContentPlaceHolderID一致 this.MasterPageFile="~/母版.master"; 6.隐藏母版页中ID=loginOrRegister的控件 this.Master.FindControl("loginOrRegister").Visible = false; 内容页给母版页的文本框赋值: if(this.Master != null) TextBox txt=this.Master.FindControl("TextBox1") as TextBox; if(txt != null) txt.Text=this.TextBox1.Text; 7.ServerCtrl.ClientID document.getElementById("<%=this.TextBox1.ClientID%>").Value;//给子页面名称为TextBox1的文本框赋值 第四章: 1: 三层,工厂模式[反射] 抽象工厂 反射[spring]: 工厂,策略,provider 抽象工厂和反射细节区别 A: DALFactory B: 配置文件 appSettings-->name=dalType value=RoleRightSys.SqlServerDAL (1):value必须是程序集名称[不包括扩展名] (2):程序集项目中的程序集名称和默认命名空间要相等 (3):将生成的程序集反射成对象 public static T CreateOjectDal<T>(string className) { string path = DBType; className = path + "." + className; return (T)Assembly.Load(path).CreateInstance(className); //找程序集-->实例化类--> 转为父类 } 例如:DBType=RoleRightSys.SqlServerDAL className=RoleInfoDal T=IRoleInfo 最终:className=RoleRightSys.SqlServerDAL.RoleInfoDal 1):Assembly.Load(path) 加载path指定的程序集 错误: 程序集找不到 ----->工厂项目和path指定的项目不再同一目录 程序集名称错误 ----->查看项目的属性-->程序集名称 2):CreateInstance(className)---实例化对象 错误: 命名空间或类名不匹配, 区分大小写 3):确保实例化对象继承了T所指定的接口 程序集:.exe[控制台应用程序,window应用程序]或.dll[类库] 用反射实现的优点: A: 代码简捷 一个类 一个方法 B: 扩展性更好[功能扩展:多一个接口, 支持扩展:多一个数据库] 2: xml操作[基础] A: xml的序列化 1):更加简单地替换IO操作 2):结合WebService工作 3):配合Ajax工作 要求 1):被序列化的类必须用public修饰 2):被序列化的类必须有默认的构造函数 3):被序列化的相关类也必须满足1),2)条件 使用场合 1):单纯为了数据持久化 2):为了实现依赖缓存 缺点:不能按需求完成层次结构 3.页面中输出客户端脚本(JavaScript) this.Page.ClientScript.RegisterStartupScript(this.GetType(),"","<script>alert('请填写用户名!')</script>"); 第五章: 1.调用脚本: this.ltMain.Text="<script>alert('注册成功!');window.location='default.aspx'</script>"; 2: 光棒效果: 订阅RowDataBound事件,行数据绑定后触发 protected void gvBooks_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='#6699ff'"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor"); } } 3: 全选 3.1: 添加自定列 TemplateField 3.2: 编辑自定义列 3.2.1: HeaderTemplate html-->checkbox 3.2.2: ItemTemplate 服务器checkbox 3.3 html-->checkbox 的 onclick 事件 4: 类型修改 protected void btnModify_Click(object sender, EventArgs e) { StringBuilder ids = new StringBuilder(); foreach (GridViewRow row in this.gvBooks.Rows)//遍历整个GridView行 { CheckBox ck = row.FindControl("ckItem") as CheckBox; if (ck != null && ck.Checked) { ids.Append(gvBooks.DataKeys[row.RowIndex].Value.ToString() + ",");//必须设置 GridView的属性 --> DataKeyNames为Id (bookid) } } if (ids.Length != 0) { string strIds = ids.ToString(); strIds = strIds.Substring(0, strIds.Length - 1); BookManager.ModifyCatagory(strIds, ddlTypeName.SelectedValue.ToString()); this.gvBooks.DataBind(); } } 更新sql为update book set CategoryID=1 where bookid in (1,2,3,4,5) 5: 如果要Html标签正确显示效果:设置: 数据项的 HtmlEncode =false 6.Eval 和Bind方法的区别: Eval 为只读的方法,而Bind方法会将值回传到服务器 Eval重载方法:<%# Eval("PublishDate","{0:dd/MM/yyyy}")%> //0代表对应的PublishDate字段,dd/MM/yyyy为文本的显示格式 Bind既能从服务器获取值又能回传值到服务器 第六章: 1.数据验证控件: (1).RequiredFieldValidator:非空验证 display属性设置为Dynamic可动态该变(如果一个文本框有两个验证,如果一个验证没有显示,则会隐藏,不会 占用存在的空间) (2)CompareValidator:是否符合要求(比较值) (如果用户输入为空,则不进行验证) ControlToValidate 要验证的控件 ControlToCompare 要来与要验证控件进行比较的控件的ID Operator 设置要比较的运算符 例:要比较输入是否为日期类型,需移除ValueToCompare和ControlToCompare的值,设置Type类型为Date,设置Operator值为DataTypeCheck (3)RangeValidator:范围检查 ControlToValidate 要验证的控件 MaximumValue 最大值(包括最大值) MinimumValue 最小值(包括最小值) Type 验证类型 (4)RegularExpressionValidator:正则表达式验证 中文字符的正则表达式:[\u4e00-\u9fa5] 货币(正数或负数):(-)?\d+(\.\d\d)? (5)CustomValidator:自定义验证控件 ControlTovalidate 要验证的控件的ID ClientValidationFunction 用于设置客户端验证的脚本函数 (6)ValidationSummary:汇总所有的错误报告 ShowMessageBox 是否显示弹出的提示消息 ShowSummary 是否显示该报告内容(一般为false) 2.Page.IsValid:所有验证是否都通过 3.<asp:Literal id="ltMain" runat ="server"></asp:Literal>:简化Label控件,用它生成的HTML代码不包含任何自动生成的HTML元素 一般在弹出脚本信息的时候用到 如:this.ltMain.Text="<script>alert('注册成功!')</script>"; 4.图片上传: protected void dvBookList_ItemUpdated(object sender,DetailsViewupdatedArgs e) { FileUpLoad fulBook=this.dbBookList.FindControl("fulBook") as FileUpload; Image imgBook=this.dvBookLIst.FindControl("imgBook") as Image; string fileName=fulBook.FileName; if(fileName.Trim().Length !=0) { string strPath=Server.MapPath(imgBook.ImageUrl); fulBook.PostedFile.SaveAs(strPath);//覆盖原来路径中图片 } } 5 .MultiView:可以作下一步的功能 例:mvOne.ActiveViewIndex=0;mvOne.ActiveViewIndex++;mvOne.ActiveViewIndex - -; 6.ImageMap:可在一张图片上制造多个连接 例: <div> <asp:ImageMap ID="imgmap" runat="server" HotSpotMode="Navigate" ImageUrl="~/Images/模型.JPG" OnClick="imgmap_Click"> <asp:RectangleHotSpot Bottom=267 Right=150 AlternateText="User" NavigateUrl="~/FileUpload.aspx" Target="_blank" HotSpotMode="PostBack" PostBackValue="User" /> <asp:RectangleHotSpot Bottom=267 Left=151 Right=318 AlternateText="UserState" NavigateUrl="~/Calendar.aspx" HotSpotMode="PostBack" Target="_blank" PostBackValue="UserState" /> </asp:ImageMap> <asp:Label ID="lblShow" runat="server" Width="312px"></asp:Label> </div> 7.HyperLink :相当于HTML中的<a href=""></a>标签 8.删除 (1): GridView 尽量不要用GridView自带的删除按钮,因为不会提示 自带删除 1: 设置数据源的Delete方法 2: 设置GridView的DataKeyNames--Id 3: 不会提示用户删除 (2): 添加子定义模板,用来删除 添加一个LinkButton (3): 获取删除项ID LinkButton --> CommandArgument (4): 设置OnClientClick属性 4.1 直接设置 4.2 RowDataBound 中写代码 (5): 设置CommandName-->MyDel[千万别省事,写成Del] (6): 订阅GridView的RowCommand,也可以订阅LinkButton的Click事件 修改 (1): 编写修改的BLL层方法,参数一般不能是实体类,而是参数列表 参数的名字应该和实体类的属性对应,但不区分大小写,可以自由排列 (2): 如果遇到html格式的内容,应设置Page的ValidateRequest="false" (页面最上面写) (3): 如果不使用自定义模板,那么将不更新字段的ReadOnly设置为true (4): 如果更新的方法参数没有对应的更新项,那么应在ItemUpdating赋值 (5): 如果使用自定义模板列,注意Bind和Eval区别 (6): 如果要添加验证,必须变成模板列 第七章: 1.GridView展示:多行多列数据 DataList 展示:多行单列数据 Repeater展示:单行多列数据 2.PagedDateSource类的分页 CurrentPageIndex 当前页 PageCount 总页数 Count 总记录数 PageSize 每页记录数 DataSource 数据源 AllowPaging 控件是否自动分页 IsFirstPage 控件是第一页 IsLastPage 页面是最后一页 缺点:不能超过一万行的数据,占用资源 例: PagedDataSource savePage = new PagedDataSource(); savePage.DataSource = BookManager.GetOrderedSmallBooksByCategoryId(0, ViewState["Order"].ToString()); savePage.AllowPaging = true;//不写不会分页 savePage.PageSize = 12; savePage.CurrentPageIndex = Pager; this.Repeater.DataSource = savePage; this.Repeater.DataBind();//不写不会显示 3.ViewState["名称"]=值;页面级别的信息保持,不影响其它页面的分页 第八章 1. 使用FreeTextBox控件:将FreeTextBox.dll拖入工具箱中,就可以使用 注意:使用该控件,需要在Page指令上添加ValidateRequest="false" 2.CodeSmith工具:编写代码是在CodeSmith Studio中,运行在CodeSmith Explorer中 使用条件:表要有主键,但不能有组合键 模板声明:<% CodeTemplate Language="C#" TargetLanguage="C#" Description=""%> TargetLanguage:生成文件类型,如果要生成.sql文件,则标记为“T-SQL” 定义参数:<% Property Name="Number" Type="Int32" Category="Context" Description=""%> Name:参数名 Type :参数类型 Category:生成的模板显示的是输入框还是下拉框等。 如果涉及到数据库访问,需要引入相关的组件并声明命名空间,代码如下: <%@ Assembly Name="SchemaExplorer" %> <%@ Import Namespace="SchemaExplorer" %> CodeSmith编码例子:(创建一个更新的存储过程) <%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %> <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="????" %> <%@ Property Name="ModelsNamespace" Default="Models" Type="System.String" Category="Context" Description="????" %> <%@ Assembly Name="SchemaExplorer" %> <%@ Import Namespace="SchemaExplorer" %> Create PROCEDURE [Pro_Update<%=SourceTable.Name%>] <%for(int i=0;i<SourceTable.Columns.Count;i++)%> <%{%> <%=GetType(SourceTable.Columns[i])%><% if(i<SourceTable.Columns.Count-1)%><%{%>,<%}%> <%}%> as Update Books set <% for(int i=0;i<SourceTable.Columns.Count;i++) %><%{%><%=GetColumn(SourceTable.Columns[i])%><% if(GetColumn (SourceTable.Columns[i]) !="" && i<SourceTable.Columns.Count-1)%><%{%>,<%}%><%}%> where Id=@<%=SourceTable.PrimaryKey.MemberColumns[0].ToString().Substring(SourceTable.PrimaryKey.MemberColumns[0].ToString ().LastIndexOf(".")+1)%> <script runat="template"> public string GetType(ColumnSchema column) { string para="@"+column.Name+" "+column.NativeType; switch(column.DataType) { case DbType.String: case DbType.AnsiString: case DbType.AnsiStringFixedLength: case DbType.StringFixedLength: para+="("+column.Size+")"; break; } return para; } public string GetColumn(ColumnSchema column) { string para; if(SourceTable.NonPrimaryKeyColumns.Contains(column)) para=column.Name+"=@"+column.Name; else para=""; return para; } </script> 第九章 1.ASP.NET在处理HTTP请求时的两个核心的机制是HttpModule和HttpHandler 2.用户控件 后缀名:.ascx (Web 用户控件) 注意: (1).用户控件可以包含其它用户控件 (2).用户控件不可以单独访问 (3).用户控件不可以自己访问自己 (4).不能导入Style样式 (5).内容页的Load事件比用户控件的Load事件先执行 3.HttpHandler程序:后缀名:.ashx (一般处理程序) 注意:public void ProcessRequest(HttpContext context){} 是该程序运行的最终方法,程序运行从该方法开始 该程序可直接访问,并且输出context.Response.Write("Hello World");括号中写的内容 context.MapPath(context.Request.Params["ISBN"].ToString()+".jpg");可获取文件的物理路径 4.在Web.config配置文件的<system.web></system.web>节点中写<add verb="*" path="Image/BookCovers/*.jpg" type="CoverHandler/"> 当应用程序访问Image/BookCovers/下面的图片格式为.jpg时,将自动访问ConverHandler类 werb:代表(Get,Post,FTP等)列表,*为通配符,此处表示所有的请求 5.HttpHandler程序默认不能访问session对象,必须实现System.Web.SessionState.IRequiresSessionState接口才行,否则报错 示例: public class ValidHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public void ProcessRequest(HttpContext context) { } } 第十章 1.如果网站有上传功能,要过滤掉文件名为*.aspx ,*.ashx, *.asp 2.在Web.config中自定义节点必须现在<configSections>中声明,例如: <configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections> 3.加密一个特定网站的web.config文件 在SDK 命令提示中aspnet_regiis -pef "connectionStrings" "E:\ASP\资料\用户控件和内容页的相互传值\Web" -prov "DataProtectionConfigurationProvider" 解密: aspnet_regiis -pdf "connectionStrings" "E:\ASP\资料\用户控件和内容页的相互传值\Web" -prov "DataProtectionConfigurationProvider" 4.自定义错误: <customErrors defaultRedirect="~/ErrorPage.htm" mode="RemoteOnly"> <error statusCode="404" redirect="FileNotFound.htm"/> </customErrors> defaultRedirect代表发生错误时,浏览器重定向到的URL mode指示启用(On).禁用(Off)自定义错误,还是只让其显示给远程计算机(RemoteOnly),一般用RemoteOnly error子标签用于定义一些特殊的错误,属性: statusCode:HTTP错误的状态码,比如,403为禁止访问、404为文件未找到、500为内部服务器错误等 redirect:用于指定当该状态的错误发生时,重定向到的页面的URL 5.调试: <!-- 设置 compilation debug="true" 将调试符号插入 已编译的页面中。但由于这会影响性能,因此只在开发过程中将此值设置为 true。部署时将此值设置为false --> <!-- 通过 <authentication> 节可以配置 ASP.NET 使用的 安全身份验证模式, 以标识传入的用户。 --> <compilation debug="true"> <assemblies> <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> </assemblies> </compilation> 6.运行时配置:<httpRuntime enable="true" executionTimeout="15" maxRequestLength="4096"/> enable:设置为应用程序的状态,如果设置为false,则相当于关闭了该站点 executionTimeOut:程序执行时间的上限,如果执行一个复杂的循环,如果时间超过了设定的时间,程序将自动结束掉 maxRequestLength:设置最大上传内容大小,默认为4096KB(4MB)。 7.在Visual Studio 2005 命令提示中输入aspnet_regsql 可以创建aspnetdb.mdb数据库 注意:aspnetdb.mdb数据库可自行附加到数据库中 8.部署 部署前准备: (1).在web.config中关闭调试功能 <compilation debug="false"> <assemblies> <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> </assemblies> </compilation> (2).使用Release的方式编译应用程序 9.发布站点方式: (1).XCopy方式 语法:xcopy 源目录 目标目录 /f /e /k /h 示例:Xcopy D:\MyBookShop\Web D:\Web\Default.aspx (2).复制站点 操作:在“解决方案管理器”的工具栏上有一个复制站点的选项 缺点:网站可能被别人破解 (3).发布预编译网站(常用方式) 操作:右键单击“解决方案管理器”中的Web项目,“允许更新此预编译站点”勾上,其它两个复选框不勾,如果“使用此命名和单页程序 集”勾上,则站点容易被破解 补 |
请发表评论