您的位置:首页 > 编程语言 > ASP

ASP.NET学习与分享之一——三个支柱

2007-08-27 21:55 190 查看
前言

不知道这个东西能否算是技术文章或者是教程

这些是我在学习ASP.NET过程中的体会与心得,也许还有很多错误和需要改正的小毛病

但是,像这样站在学习者角度写的教程(姑且这么叫)或许会更容易让想要学习ASP.NET的人接受。

废话不多说直接开始

第一章 架构

第一节 基本原理与三个支柱

             我是从学习ASP转而学习ASP.NET的,相信也不乏有许多像我这样的学习者,往往在开始会有许多不习惯,有人说不学习ASP对学习ASP.NET事件好事。但要真正熟练掌握ASP.NET,学习过ASP还是会有帮助的。

程序1

这是一个非常简单的显示动态内容ASP.NET网页,其中的处理请求的方式与ASP十分相似,使用了<%=%>在静态内容中插入动态内容

<%@ Page Language="C#" Debug="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
const int _itemCount = 10;
       
string GetDisplayItem(int n)
{
    return "Item #" + n.ToString();
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Simple page</title>
</head>
<body>
    <h1>Test ASP.NET 2.0 Page</h1>
    <ul>
    <% for (int i=0; i<_itemCount; i++) { %>
    <li><%=GetDisplayItem(i)%></li>
    <% } %>
    </ul>
    <%
    Response.Write("<h2>Total number of items = " + _itemCount.ToString() + "</h2>");
    %>
    <%= GetType().Assembly.Location %>
</body>
</html> 

学习过ASP的朋友很容易理解其中的内容,通过<%=%>直接地将要显示的内容输出到HTML代码中,对于ASP.NET来说,这种方法的缺点就是代码与HTML代码互相掺杂,像这个例子,循环语句被HTML代码所分开,如果进行版面设计是非常不容易的事情,并且,设计者也无法直观的看到网页的样子,对一些格式的安排产生了影响,所以ASP.NET的诞生就很好的解决了这个问题,我们用到很重要的一个东西就是服务器控件,可以先看一下

程序2

<%@ Page Language="C#" Debug="true" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
const int _itemCount = 10;
       
string GetDisplayItem(int n)
{
    return "Item #" + n.ToString();
}

protected override void OnLoad(EventArgs e)
{
    // Clear out items populated by static declaration
    _displayList.Items.Clear();
   
    for (int i=0; i<_itemCount; i++)
        _displayList.Items.Add(new ListItem(GetDisplayItem(i)));
   
    _messageH2.InnerText = "Total number of items = " + _itemCount.ToString();
   
    base.OnLoad(e);
}   
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Simple page with controls</title>
</head>
<body>
    <form runat="server" id="_form" >
    <h1>Test ASP.NET 2.0 Page with controls</h1>
    <asp:BulletedList runat="server" ID="_displayList">
        <asp:ListItem>Sample Item 1</asp:ListItem>
        <asp:ListItem>Sample Item 2</asp:ListItem>
        <asp:ListItem>Sample Item 3</asp:ListItem>
    </asp:BulletedList>

    <h2 runat="server" id="_messageH2">Total number of items = xx</h2>
    </form>
</body>
</html>

大多数ASP.NET网页不使用脚本插入动态内容,而是使用服务器端控件架构。这些控件通常包含属性RUNAT="SERVER",并且以ASP字母开头,这些控件表示特殊的元素或者元素集合。如上述例子,项目列表和H2元素都是服务器端控件,在收到请求并且生成网页的时候,服务器将最开头的代码解释之后,替换服务器端控件的这些元素,最后还是以HTML代码呈现出来。这样的话,这些元素都是独立可编辑的,对他们的属性进行定义后便可以改变生成内容的属性,如字体,颜色,位置等等。使得在布局设计器中就能够正确的显示出运行阶段的基本外观,便于设计者进行布局排版。

这些控件后的ID属性就是与HTML代码之前的代码中相对应的对象,上述例子中的_messageH2、_displayList就是链接代码与布局的纽带。

服务器端控件就是我开头所说的第一个支柱

第二个支柱是类声明,这点对于初学者来说也许不好理解,我个人的理解(不一定正确),就是对原本的网页进行简化,去掉HTML代码,加上一些类声明的代码,然后使得整个网页成为一个类,可以像其他脚本一样交互,如程序一进行解析类声明后得到了

程序3

<%@ Page Language="C#" %>

<script runat="server">
    const int _itemCount = 10;

    string GetDisplayItem(int n)
    {
        return "Item #" + n.ToString();
    }

    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write("<!DOCTYPE html PUBLIC /"-//W3C//DTD " +
                     "XHTML 1.0 Transitional//EN/" /"http://www.w3" +
                     ".org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");

        writer.Write("/r/n/r/n<html xmlns=/"http://www.w3.org/" +
                  "1999/xhtml/" >/r/n<head>/r/n<title>Simple page<" +
                  "/title>/r/n</head>/r/n<body>/r/n" +
                  "<h1>Test ASP.NET 2.0 Page</h1>/r/n    " +
                  "<ul>/r/n    ");

        for (int i = 0; i < _itemCount; i++)
        {
            writer.Write("/r/n<li> ");
            writer.Write(GetDisplayItem(i));
            writer.Write("</li>/r/n    ");
        }

        Response.Write("<h2>Total number of items = " +
                       _itemCount.ToString() + "</h2>");

        writer.Write("/r/n</body>/r/n</html>/r/n");

        base.Render(writer);
    }
</script>

省略了HTML代码,加入了一些八股文之后就使得网页整个成为一个类,可以对其进行直接的引用
a007


第三个支柱是数据绑定,我们在进行网页制作的时候,并不需要对某些要显示的内容进行编程,比如上述例子中,ITEM1-ITEM10这些项目列表并不需要用编程的方式也能显示,比如直接的一个数组{ITEM1,ITEM2,ITEM3……},更有的时候,我们从数据库中直接读取数据,那么如何将这些数据显示到网页上呢?

程序4

<%@ Page Language="C#" Debug="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">   
string[] _displayItemData = {"Item #1", "Item #2", "Item #3", "Item #4", "Item #5",
    "Item #6", "Item #7", "Item #8", "Item #9", "Item #10"};

protected override void OnLoad(EventArgs e)
{
    _messageH2.InnerText = "Total number of items = " + _displayItemData.Length.ToString();

   _displayItems.DataSource = _displayItemData;
   _displayItems.DataBind();
         
    base.OnLoad(e);
}   
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Simple page with controls</title>
</head>
<body>
    <form runat="server" id="_form">
        <h1>Test ASP.NET 2.0 Page with data binding</h1>
       
        <asp:BulletedList runat="server" ID="_displayItems">
            <asp:ListItem>Sample item 1</asp:ListItem>
            <asp:ListItem>Sample item 2 ...</asp:ListItem>
        </asp:BulletedList>
       
        <h2 runat="server" id="_messageH2">Total number of items = xx</h2>
    </form>
</body>
</html>

例子中使用了服务器端控件BULLETELIST,将枚举型的数据元素集合(数组string[] _displayItemData )绑定到了这个控件上,通过   _displayItems.DataSource = _displayItemData;与   _displayItems.DataBind();两个声明实现数据源的获取,而ID="_displayItems"则是链接代码与内容的纽带。

到现在位置,本节的内容已经结束,通过学习我了解了如何将网页解析为类声明、服务器端控件和通用的数据绑定,ASP.NET2.0就是建立在这些支柱的基础之上的。而开发人员可以高效的使用一些工具,使得网页开发效率大大提高。

-------------------------------------------------------------------分割线----------------------------------------------------------------

写后感:

第一次写技术文章心里总是有些忐忑不安,生怕写错内容或者写的不好,当然这些东西是不可避免的,作为一个学习者。

从使用记事本写ASP到用VS开发ASP.NET,计划永远是赶不上变化的,这不,AJAX技术又向我们袭来,我们只能稳住不乏,在过程中磨练。

这个系列的学习心得我会继续写下去,我学多少写多少,当然最希望大家对我的文章提出一些建议,有错误的地方希望能指正,我会认证接受修改,以免误人子弟。

其他初学者可以借鉴一下我的理解,当然重要的还是自己去参透,毕竟我也只是初学者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息