WebForm 基础2

企业项目中最多“轻量的”使用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。



转载自:传智播客   

你可能感兴趣的:(WebForm 基础2)