ASP.NET 基础知识一些要注意的问题

1、ASP.NET和ASP.NET webform的关系
    ASP,NET=ASP.NET webform+asp.net mvc+asp.net其他框架用模板引擎这种方式就是用asp.net这种框架做的web开发
    ASP.NET webform就是asp.net提供的那堆服务器控件
2、aspx页面的特点,一部分由服务器解释执行,一部分直接是原样输出给浏览器。对于runat="server"的标签,要进行特殊处理

3、除了<%%>的内容和runat=server的内容,其他都是按原样输出。<%%>是可以在aspx里面写C#代码的语法。
<% for(in i=0;i<10;i++)
{
      Response.Write(i);
}
%>

//在页面里输入这个,就可以循环输出,这种方式淘汰。使可维护性降低了。知道就行,不要深究。

4、在aspx里面可以通过=来执行一个方法,并且把这个方法的返回值输出到这个位置,注意写等号,这个方法在cs里定义。
<%=SayHello%>
<%=SayName%>
若不加=,<%Response.Write(SayName())%>//一样的效果。
<%=DataTime.Now%>

4、aspx和ashx的关系,
aspx页面继承了,System.Page.UI而这个又继承了IHttpHandler,ashx也继承了IHttpHandler接口
aspx其实就是一个特殊的ashx,所以说aspx是高级的HttpHandler,aspx封装了很多底层操作,可以帮我们进行傻瓜式开发。

5、aspx和C#代码的关系。
this.GetType();//输出当前对象的类型,当前对象实例的类型。
class Parent
{
     public void Print()
{
     Console.WriteLine(this.GetType());
}
}
class Child:Parent
{

}
Child c=new Child();
c.Print();//这个输出Child,是当前child的类型,所以是child

this.GetType().Assembly.Location //输出当前对象的类型所在程序集的位置。
this.GetType().BaseType//输出当前对象的父类
this.GetType().BaseType.Assembly.Location//输出当前对象父类的程序集的位置。

6、ASP.NET中,当前执行页面的类名是ASP webform1_aspx这样的类名,父类才是ASP.NETTest1.WebForm1
ASPNETTest1.WebForm1是在VS中编写的aspx.cs类,而ASP.webform1_aspx代码是根据aspx内容动态生成的构建网页内容的类。综上,aspx最终会生成一个类,这个类是继承自aspx.cs中的类,查看反编译以后的代码,可以看到就是编译生成了普通的.NET代码,代码中的拼接html。因为aspx生成的代码是cs类的子类,所以就明白了为什么aspx中调用cs的成员级别必须是protected或者public而不能使private(这个对于4中的调用来说的,写到aspx代码里面)

7、<%@Page Language="C#" AutoEventWrieup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebFormTest1.WebForm1"%>
CodeBehind="WebForm1.aspx.cs" 意思是对应的CodeBehind代码是这个WebForm1.aspx.cs
Inherits="WebFormTest1.WebForm1"意思是继承自WebFormTest1.WebForm1

8、VS2012浏览页面的问题,正常运行的时候应该列出所有可以访问的页面,
VS2012默认使用IIS web服务器,而不是Visual Studio开发服务器,2012提供的开发服务器是一个迷你版的一个叫卡卡西尼,在web发布里面改回来就可以。或者设置起始页。
或者在项目那里点右键属性,在Web里面里面有个服务器,默认是使用本地IIS服务器,把它勾选成使用Visual Studio开发服务器,这样就采用以前vs的开发服务器了,性能差一点罢了。建议第一种方式

9、常用的轻量级的控件TextBox、CheckBox、Button、CheckBox、RadioButton、FileUpload、DropDownList、ListBox、Repeater、ListView(能用repeater做不用ListView)
强烈不建议用的:DataSource、母版页、Validator、ASP.NET AJAX(AJAX、Extensions)、View、MultiView、Login、导航分组下(SiteMap、TreeView、Menu)、AdRotator、WebParts)等

10、Button控件的OnClick和OnClientClick。OnClientClick中可以写javasript代码,当点击的时候在客户端处理的代码,OnClick是一个服务器的事件,OnClientClick是生成到客户端上面的。
LinkButton不建议用,不要滥用。能用<a href="http://www,baidu.com">访问百度</a>这种方式就可以在客户端实现重定向,不必用linkButton还在里面写事件,服务器处理。浪费资源,而且href方式还可以被SEO爬到。

11、在aspx的页面上,选了时候,没有执行这个,因为没有触发事件,自己写javasript或者设定DropDownList的AutoPostBack为true就自动在javascript那里生成一个OnChange事件。所以要知道为什么。
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
{
   if (ddlProvince.SelectedValue == "hb")
   {
       ddlCity.Items.Clear();
       ddlCity.Items.Add("石家庄");
       ddlCity.Items.Add("唐山");
       ddlCity.Items.Add("保定");
    }
    else if (ddlProvince.SelectedValue == "sd")
    {
       ddlCity.Items.Clear();
       ddlCity.Items.Add("济南");
       ddlCity.Items.Add("青岛");
       ddlCity.Items.Add("菏泽");
     }
     else if (ddlProvince.SelectedValue == "hn")
    {
       ddlCity.Items.Clear();
       ddlCity.Items.Add("郑州");
       ddlCity.Items.Add("驻马店");
       ddlCity.Items.Add("南阳");
     }
     }
12、IsPostBack判断是初始进入这个页面的,还是从前一个页面提交回来的。比如查询数据库就可以使用IsPostBack.在选择DropDownList的下拉列表时,选中之后没有更新,因为每选完都会有个pageload重新加载,所以要注意IsPostBack中怎么写。
Protected void Page_Load(object sender,Event Args)
{
//无论是初始进入页面还是Button等触发页面提交表单,都会每次执行Page_load这个事件
if(IsPoseBack)
{
     Lable1.Text="是PostBack";
}
else
{
     Lable1.Text="不是PostBack";
}
}

13、aspx是高级的HttpHandler,所以也是无状态的。以下例子可以让aspx有状态,其实也是设置隐藏字段的原理,它把浏览器当成了一个数据暂存的场所。跟一般处理程序自增一个原理。
protected void Button1_Click(object sender,EventArgs e)
{ //把数据放到ViewState中就会把Http变成"有状态的"
//this.ViewState["aaa"]=33;
object age=this.ViewState["age"];
if(age==null)
{
     age=1;
     this.Viewstate["age"]=age;
}
else
{
    int i=(int)age;
    i++;
    age=i;
    this.ViewState["age"];
}
label1.Text=age.ToString();
}

14、不用ViewState做一个自增,//因为页面中只有value值可以提交给服务器,但是label2.text不会提交的,所以这个每次给它加一个,修改值会自动存到viewstate中,不改就不会存到viewstate中的。
protected void Button1_Click(object sender,EventArgs e)
{
    int i=Convert.ToInt32(Label2.Text);
    i++;
    Label2.Text=i.ToString();
}

15、<div>
<table>
<tr><td>id</td><td>name</td><td>msg</td></tr>
<asp:Repeater ID="repeaterProducts" runat="server">
<ItemTemplate>
<tr><td><%#Eval("Id")></td><td><%#Eval("Name")%></td><td><%#Eval("Msg")%></td></tr>
</ItemTemplate>
</table>
</div>
-------------------------------------------ViewStateTest2.aspx
Protected void Page_Load(object sender,Event Args)
{
if(!IsPoseBack)//第一次加载
{
    DataTable dt=SqlHelper.ExecuteDataTable("select * from [T_Products]");
    repeaterProducts.DataSource=dt;
    repeaterProducts.DataBind();
}
}
查看html源代码,看到value有很多东西,其实是viewstat隐藏字段e把repeater里面的东西都存起来了。没有必要复制repeater里面的值,网页的打开速度慢了,所以要禁用viewsate
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewStateTest2.aspx.cs" Inherits="WebFormTest1.ViewStateTest2" EnableViewState="false" %>
对某个控件进行禁用<asp:Repeater EnableViewState="false" ID="RepeaterProducts" runat="server">

16、ViewState禁用的一个原则,什么时候禁用它。
先禁用,实在不行再启用(几乎没有非要ViewState才能做的事),是在不行自己做隐藏字段,当数据不需要下次再使用的时候,要禁用,下次还要使用则一般不要禁用。

17、UpdatePanel,向服务器请求,局部刷新。但是浪费资源,没有直接返回需要的那部分,而是把在Panel里的东西全部刷新。性能不好,不能很灵活的进行控制。

ASP.NET 基础知识一些要注意的问题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。