当窗体某一区域无法确定是属于哪一个元素时,又想修改此区域,可在设计视图中,点此区域,右键:样式:中修改
WebPartManager控件
webpartManager部件:管理网页上所有的Web控件,功能,事件,可自定义控件
客户端提交server端不同步
CheckBox _CheckedChanged用此事件时,控件属性设置AutoPostBack设为true
DropDownList也是一样
主题皮肤
皮肤是应用到一个控件上的样式信息,主题是皮肤的集合,一系列皮肤就构成了主题,
母版
多个页面,用相同的模版时,可用
使用母版的页有统一的页面搭配如:页头,导航,页脚等等
Repeater控件
他简单,小巧,灵活,只跟数据库打交道
三个主要控件GridView Datalist Repeater
显示较复杂的数据:GridView
一般复杂的 DataList
简单的 Repeater
Wiard步骤控件
步骤控件如上一步,下一步,完成,中间可可添加控件等,步骤可重排,重写
-----------------------------用户控件_自定义控件区别
--------------------课件
asp.net4个页面变量:
Application全局变量
session会话集变量 用完要释放资源removeall
ViewState页面集变量 视图状态 值 会一直存在 缺点:存在html客户端 代码越大加载越慢
cookio
以上都占资源,不要太多用
asp.net组成
App_code c#代码
app_data 数据库
web.config 配制文件
global.asax
window控件lables 转成html是span标签
视图拖出浮动不能靠边,双击此视图标题栏
c#调试中用即时窗口,如返回ds时,断点选中ds此行时,在即时窗口中输入ds.table
[0].rows.count直接回车,显示5行
---------------------------------------------
控件:实现功能且能看见
组件:实现功能但不能看见
数据源控件基类:control类
ado.net基类;system.Data
-----------------------------------------------
分析器或编译器在分析或编译页时用@page(<%@ page %>)设置分析器或编译器的属性
控件时用@control(<%@ control %>)设置分析器或编译器属性
request用于客户端发送到服务器端的请求
resqose用于客户端请求,将结果返回在客户端浏览器
request对象的类型为httpRequest
resqose对象类型为httpResqose
server对象类型为httpserverutility
Application对象类型:httpApplicationState
Session对象类型httpSessionState
asp.net会话状态保存方法:
客户端
viewstate queryString HiddlenFiled cookie
服务器端
Application Sessition DataBase
Web服务器控件基类WebControl
aspx网页基类system.web.ui.page
html服务器控件基类htmlControl
容器控件基类htmlcontainercontrol
自定义用户控件webusercontrol基类usercontrol
------------------------
控件:实现功能且能看见
组件:实现功能但不能看见
数据源控件基类:control类
ado.net基类;system.Data
-----------------------------------------------Page.isPostBack
判断不让回刷方法
1:public void Page_Init(object sender,eventargs e){
在此事件中直接写代码}
2:public void Page_Load(object sender,eventargs e)
{
if(!isPostBack())
{在此if中写代码
}
-----------------------------------------
Page.IsPostBack==false表示:该页是第一次生成 或理解 为第一次访问页面
Page.IsPostBack==true表示:该页不是第一次生成,可能是用户点后退 用户点击按钮,导致
提交表单时产生的页面访问。
做这个判断后可以减轻服务器端的负担,避免不必要的重复进行数据帮定
目的是:1、避免重复到数据库里提取数据。
2、保持状态。
如果是绑定下拉列表框的话,就必须用这种方式绑定。
在第一次访问的时候绑定下拉列表框,用户可以看到下拉列表框里的选项,然后作选择,比如选择
了第三项,然后提交表单,这时我们希望能够得到下拉列表框选定了第三项的状态。
如果不加上 if (!page.ispostback) 的判断的话,那么得到的选项永远都是第一项,因为每次都重
新绑定,并且设置第一项被选中。
------------------
!Page.IsPostBack(){}里的代码是只让网页在首次加载时执行。如有的下拉框,如果你不这样做
的话,你每选一次,网页刷新一次,下拉框重新加载,你以前的选择就不会出现在文本框中了,而
是每次的默认选项
一个B/S结构的页面每一次提交,它都会重新从头到尾执行一次。而C/S结构的程序就不会这样,这是
和C/S结构的程序最大的区别!其实,得不到控件的数据,都是因为这个原因。
if(!IsPostBack)
{
//这里的代码在页面首次显示时执行,其他情况下不再执行。
}
在IE地址栏里输入地址后显得的页面的IsPostBack肯定是false,第一次加载 点击页面上触发所谓
PostBack的按钮等等时,新返回来的页面的IsPostBack==true.不是第一次加载
--------------------
ispostback是判断页面是否已经发送过请求。
如果是第一次,则返回false,如果不是,则返回true.
所以if(!ispostback)里面的代码只有第一次请求时才会执行,如果再操作页面的其他按钮或者什么
事件时。就不会再执行if(!ispostback)里面的代码了。。
每个控件本身拥有一个ControlState(可以理解为控件自己的ViewState)用于保存控件本身的状
态,比如控件中的数据等等,这也就是为什么服务器控件在页面刷新后值仍然能留在控件中,而普
通的HTML控件一刷新值就没有了道理
---------------------------------girdview与datalist区别
gridview:表格视图 表格:为行rows["列"]列cols集合
datalist列表视图 list列表为items[datalistitem]项集合
-----------------------------
global.asax用于保存应用程序级事件,对象,变量
asp.net应用程序只能有一个globla.asax文件,global.asax文件是可选的,没有global.asax也可运行
Global.asax是由System.Web.HttpAppliction类派生的
重写RenderContents方法
用户控件(.ascx)不在工具箱内,在应用程序中使用,不能跨应用程序
自定义控件(.dll)放在工具箱内,可以跨应用程序域
复合控件派生自System.Web.UI.WebControls.CompositeControl类必须实现
System.web.UI.INamingContainer接口
必须重写Control基类的CreateChildControls方法
如何处理几十万条并发数据
用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
自定义控件基类System.Web.UI.UserControl,不是control/webhcontrol
客户端验证和服务器端验证
客户端验证用js实现,服务器端验证.net语言实现
客户端验证依赖于浏览器实现,服务器端验证没有
客户端验证速度较快,服务器端要访问服务器才能实现
web窗体开发由三个文件组成:.aspx .aspx.cs .aspx.resx .asax为global.asax文件,此文件为可选文件 ,不需必须有
具有自动分页功能的数据绑定控件GridView FormView
web窗体在浏览器中解释执行,窗体中的脚本和代码可分开也可不分开
framset,只右边显示变化target(目标)="Mainfram"
项目每天要压缩成一份,以便后期改动,也防有差错
htm前台代码错误,先看最后一个错误提示
asp.net 2.0大部分web服务器控件基类:webcontrol
少部分如Literal,PlaceHolder,Rep[eater XML 服务器控件基类:control
html服务器控件基类:System.Web.UI.htmlcontrol
使某一控件获取光标,获焦点:this.textbox1.focus();
repater可嵌套使用,
链接可用hapiterlink控件,也可用a herf链接都可传参
换行用写为"<br/>"
数据源控件派生于datasourcecontrol类:datasourcecontrol类派生于control类
类编译后为.dll文件,不能改了
页面运行后ie左下角提示错误,错误行数为id工具栏中,源代码中的行数,不是后台vs2008中htm代码中的行数错误
Session["ds"]=DbHelperSQL.Query("select * from jobs");
DataSet ds = (DataSet)Session["ds"];
session:状态变量
文本取值一般为.Text或.value
用户控件中最好不用html控件,因为在主页上可能用到html控件,这样可能会出错
===============================获取id或url
当前url
this.Label1.Text = Request.Url.AbsoluteUri;
-----------------方法2
private string GetPath()
{
string strPath = "http://" + Request.ServerVariables["HTTP_HOST"] + Request.ServerVariables["PATH_INFO"] + "?" + Request.ServerVariables["QUERY_STRING"];
if(strPath.EndsWith("?"))
{
strPath = strPath.Substring(0, strPath.Length - 1);
}
return strPath;
}
-----------------------------
id
this.Label1.Text = Page.Request.UserHostAddress;
如此的id url dns 电脑名称等 都在Page.Request下
获取浏览器类型
HttpBrowserCapabilities h =Request.Browser;
this.Label1.Text = h.Browser;
========================源中代码自动缩进
切换到源视图中,菜单栏,编辑,高级,设置文档格式
设计视力中工具栏中的控件不能随便拖动,切换到设计视图中,菜单栏,布局,位置,自动定位选项,
定位选项中,将每一项选为绝对定位选项
如放在表格中则选择为静位选项 可和ctrl多选
htm中代码自动缩进,控件要拖动,不要手动写
调试时,选中一个.aspx右键在ie中浏览,不会进.cs中
要f5才行 可设某页为起始页,即从此页运行
菜单栏中:布局:位置:绝对定位时,控件可拖动,相对定位时,控件放在表格内可自动对齐,且不能拖动,出表格
=============================解决方案管理器没有
工具:选项:左下角:
显示所有选项:显示解决方案:总是显示解决方案
===========================html中格式设置,编辑:
设置文档格式快捷键:先ctrl+k 再ctrl+d
============================链接去掉虚线框
去掉图片链接的边框和颜色<img scr="" border="0">
去掉超链接的虚线边框局部控制
<a href="link1.htm" οnfοcus="this.blur()">link1</a>
<a href="link1.htm" οnfοcus="this.close()">link1</a>
<a href="link1.htm" hidefocus="true">link1</a>
<a href="link1.htm" hidefocus="hidefocus">link1</a>
============================TextBox不保存历史记录
<asp:TextBox ID="TextBox2" runat="server" AutoCompleteType="disabled" Style="z-index: 101; left: 303px; position: absolute;
top: 122px" TextMode="Password"></asp:TextBox>/// AutoCompleteType="disabled"
==========================FrameSet
-----------------------FramSet_aspx中引用位置
如放在body中不行,放在hdader中
----------------------htm中传参控制权限
login.aspx登录页
.cs//
protected void Button1_Click(object sender, EventArgs e)
{
DataSet ds= Db.Query("select * from dbUser where username='"+this.TextBox1.Text+"' and pwd='"+this.TextBox2.Text+"'");
int row= ds.Tables[0].Rows.Count;
string supter = null;
for (int i = 0; i < row; i++)
{
supter = ds.Tables[0].Rows[i]["super"].ToString();
}
if (row>0)
{
Session["super"] = supter;//参数,值先存在变量中,FrameSet.aspx页面中再调出
Response.Redirect("FrameSet.aspx?username="+this.TextBox1.Text+"&pwd="+this.TextBox2.Text+"&super="+supter);
}
}
frameset.aspx页//
<head runat="server">
<title>无标题页</title>
<frameset cols="240,*" frameborder="no" border="0" framespacing="0">
<frame src="Left.aspx" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame" title="leftFrame" />
<frame src="" name="mainFrame" id="mainFrame" title="mainFrame" />
</frameset>
</head>
left.aspx//frameset中的左边页,
<table style="width: 107px;" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" background="../images/c.jpg" height="209" valign="top" style="width: 203px">
<img src="../Images/a.gif"/>
<%if (Session["super"].ToString() == "1")
{%>
<a href="SysUser_right.aspx" target="mainFrame">超级管理员
</a>
<%} %>
</td>
</tr>
<tr><td style="height: 10px"> <img height="10" src="../images/b.jpg" width="200" /></td></tr>
</table>
frameset右边显示另一个页
孔羸思想发现:
在左边页中添加web服务器控件如:textbox text="超级管理员",点此链接时不显示链接窗口
但在左边页中写字就能链接,所以只能在htm中传参控件权限,此发现不确定对
=============================文本数据库取出时不换行的问题
.cs中与htm中转换字符不一样,这里转换
方法1
String neirong2;
neirong2=Server.HtmlEncode(neirong.Text);
String zh="";
String tmpstr="";
for (int i=0; i<neirong2.Length;i++)
{
zh=neirong2.Substring(i,1);
if (zh==" ") { zh=" ";}
if (zh=="/n") { zh="<br>"; }
if (zh=="/t") { zh=" ";}
tmpstr=tmpstr+zh; }
neirong2=tmpstr;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
方法2
/// <summary>
/// HTML encode,Html 编码
/// 用于用户输入时去除一些Html字符
/// </summary>
/// <param name="str">string</param>
/// <returns></returns>
public static string Encode(string str)
{
str = str.Replace("&","&");
str = str.Replace("'","''");
str = str.Replace("/"",""");
str = str.Replace(" "," ");
str = str.Replace("<","<");
str = str.Replace(">",">");
str = str.Replace("/n","<br>");
return str;
}
/// <summary>
/// Html decode,Html 解码
/// 把经过编码的Html 字符解码
/// </summary>
/// <param name="str">string</param>
/// <returns></returns>
public static string Decode(string str)
{
str = str.Replace("<br>","/n");
str = str.Replace(">",">");
str = str.Replace("<","<");
str = str.Replace(" "," ");
str = str.Replace(""","/"");
str = str.Replace("“",""");
str = str.Replace("”",""");
str = str.Replace("&","&");
return str;
}
也可这样:
存时用textbox
取时用textbox
htm代码中设置textbox:
<asp:TextBox ID="TextBox9" runat="server" Text='<%# Eval("content") %>' style="overflow:Hidden; background-color:#dedfde;font-size:16px; border:0;" Width="100%" Height="1000px" TextMode="multiLine"></asp:TextBox><br />
=================================不能弹出新页
datalist中:html:
<asp:DataList ID="DataList3" runat="server" OnItemCommand="DataList3_ItemCommand" DataKeyField="ID" ForeColor="Black">
<ItemTemplate >
<asp:LinkButton ID="LinkButton3" runat="server" Text='<%# Eval("header") %>' ></asp:LinkButton>
</ItemTemplate>
</asp:DataList>
.cs
protected void DataList3_ItemCommand(object source, DataListCommandEventArgs e)
{
string id = this.DataList3.DataKeys[e.Item.ItemIndex].ToString();
string h = ((HyperLink)this.DataList3.Items[e.Item.ItemIndex].FindControl("HyperLink1")).Text;
Response.Redirect("newInfo.aspx?id=" + id);
}
调用
this.DataList1.DataSource = Db.Query("select top 5 * from dbNewInfo where ID='" +Convert.ToInt32( Session["id"].ToString()) + "' order by issuanceDate desc ").Tables[0];
//this.DataList1.DataBind();
点击一行,链接到新页,但不能弹出新页,linkButton不能写target属性
弹出新页用HyperLink控件
<asp:DataList ID="DataList3" runat="server" OnItemCommand="DataList3_ItemCommand" DataKeyField="ID" ForeColor="Black">
<ItemTemplate >
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl ='<%# DataBinder.Eval(Container.DataItem,"ID","newInfo.aspx?ID={0}") %>' Text='<%# Eval("header") %>' Target="_blank"></asp:HyperLink>
</ItemTemplate>
</asp:DataList>
.cs中绑定数据库即可,不用在datalist事件中取ID值
调用
this.DataList1.DataSource = Db.Query("select top 5 * from dbNewInfo where ID='" + Convert.ToInt32(Request.QueryString["ID"].ToString()) + "' order by issuanceDate desc ").Tables[0];
this.DataList1.DataBind();
=================================表格内的控件.cs中调不出
菜单栏中:布局:位置:绝对定位时,控件可拖动,相对定位时,控件放在表格内可自动对齐,且不能拖
控件设为相对位置
====================================Table控件,动态添加行
Table控件,动态添加行:思想:单元格放入行中,行放入行集合中,行集合放入表中
TableCell c = new TableCell();//单元格
c.Text = "c";
TableRow r = new TableRow();//行
r.Cells.Add(c);
this.Table1.Rows.Add(r);//表
fileupload控件
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
FileUpload1.SaveAs("d://uploads//" + FileUpload1.FileName);//取文件路径
Label1.Text = "file name:" + FileUpload1.PostedFile.FileName + "<br>" + FileUpload1.PostedFile.ContentLength +//文件长度
"kb<br>" +
"content type:" + FileUpload1.PostedFile.ContentType;//类型
}
catch(Exception ex)
{
Label1.Text = "ERROR:" + ex.Message.ToString();
}
}
}
上传文件<4m
web.config中控制上传文件<4m
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
加这句 <httpRuntime maxRequestLength="4096" executionTimeout="90"></httpRuntime>/>//默认90秒
fileupload控件本身不启动上传,要通过一个按钮事件启动
前台代码可在后台写,后台代码也可在前台写
=====================================html中点代码处时代码跑了位置
vs ,不要点代码下面的滚动条,点代码区右边的滚动条
vs文档格式设置ctrl+e ,d