企业项目中最多“轻量的”使用ASP.NET WebForm:
Button、TextBox、CheckBox、RadioButton、FileUpload、
DropDownList、ListBox、Repeater、Label。
其他的又复杂又没用:
*DataSource、母版页、Validator(服务器验证控件)、
ASP.NET AJAX(AJAX Extensions)、View、MultiView、Wizard、
Login(登录)分组下的控件、导航分组下的控件(SiteMap、TreeView、Menu)、
AdRotator、WebParts分组下的控件等都不用刻意学。
LinkButton(不利于SEO):
一定不要使用。
用法和Button差不多,区别就是Button控件渲染为按钮,
而LinkButton渲染为超链接。不要用LinkButton来实现普通的超链接:
OnClick---》服务器---》Response.Redirect("http://")之类的动作,
等于是客户端打开一个网址,先访问服务器,服务器再把客户端的网址重定向到要访问的网址。
客户端的<a>标签都能实现,为什么还要经过服务器,浪费服务器资源。
LinkButton真没啥用,除了长得像Button一样,不利于SEO;而且效率低。
PostBack:
现在在A.aspx这个页面上,点击页面上的按钮把数据提交到A.aspx处理,
这个过程可以看做是“从客户端浏览器把之前的状态数据提交 回来(Post Back)”
默认只有点击submit按钮的时候才会提交,那么如果想在省的DropDownList改变后
动态修改市的DropDownList怎么办?可以使用SelectedIndexChanged事件。
前端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="ddlProvince" runat="server" OnSelectedIndexChanged="ddlProvince_SelectedIndexChanged"> <asp:ListItem Value="hb">河北</asp:ListItem> <asp:ListItem Value="sd">山东</asp:ListItem> <asp:ListItem Value="hn">河南</asp:ListItem> </asp:DropDownList> 省 <asp:DropDownList ID="ddlCity" runat="server"> </asp:DropDownList> 市 </div> </form> </body> </html>后端代码:
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e) { ddlCity.Items.Clear(); if (ddlProvince.SelectedValue.Equals("hb")) { ddlCity.Items.Add("石家庄"); ddlCity.Items.Add("唐山"); } else if (ddlProvince.SelectedValue.Equals("sd")) { ddlCity.Items.Add("济南"); ddlCity.Items.Add("青岛"); } else if (ddlProvince.SelectedValue.Equals("hn")) { ddlCity.Items.Add("郑州"); ddlCity.Items.Add("洛阳"); } }
可是SelectedIndexChanged事件里的代码没有执行。
从客户端考虑一下怎么可能执行?我们应该怎么办
(写js监听select的onchange事件,然后提交表单到服务器)。
把ddlProvince的AutoPostBack设置为true,就可以了!为什么?
查看一下网页源代码:
当添加了AutoPostBack之后,ASP.NET会自动给ddlProvince添加一个onchange事件:
<select name="ddlProvince" onchange="javascript:setTimeout('__doPostBack(\'ddlProvince\',\'\')', 0)" id="ddlProvince"> <option value="hb">河北</option> <option selected="selected" value="sd">山东</option> <option value="hn">河南</option> </select>在这个事件里提交表单到服务器端:
function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } }只有提交到服务器端,服务器端才能做出处理,然后把处理结果发送给客户端。
IsPostBack:
为什么需要IsPostBack,只要重新向服务器请求,
无论是刷新还是点击按钮、还是DropDownList改变,
PageLoad都会执行,有的代码希望页面第一次加载的时候才执行
(比如查询数据),那么就可以使用IsPostBack属性。
如果是第一次加载,那就不是IsPostBack:!IsPostBack。
转载自:传智播客