基于事件驱动模式的 ASP.NET 框架全栈开发

概念

Web窗体页面的生命周期的顺序是:

  • (A)视图状态
  • (B)初始化
  • (C)加载
  • (D)处理回发数据
  • (E)预呈现
  • (F)处置
  • (G)保存状态
  • (H)呈现
  • (I)卸载 答案:
  1. 初始化(B)
  2. 加载(C)
  3. 处理回发数据(D)
  4. 视图状态(A)
  5. 预呈现(E)
  6. 保存状态(G)
  7. 呈现(H)
  8. 处置(F)
  9. 卸载(I)

控件

html 属性

width 属性:元素的宽度 height 属性:元素的高度 readonly 属性:只读文本区域

标准属性

每个 asp 控件都有标准属性

Visible:决定控件是否显示,True 显示,False 隐藏

1
<asp:Button id="button1" Text="Submit" Visible="False" runat="server" />

Label 控件

在页面上显示文本

属性描述
runat该控件是一个服务器控件必须设置为 “server”
Text在 label 中显示的文本

Button 控件

Button 控件用于显示按钮按钮可以是提交按钮或命令按钮,默认是提交按钮 提交按钮没有命令名称,在它被点击时它会把网页传回服务器 命令按钮拥有命令名称,且允许您在页面上创建多个按钮控件

属性描述
CausesValidation当 Button 被点击时是否验证页面
CommandArgument要执行的命令的参数
CommandName与 Command 事件相关的命令
OnClientClick当按钮被点击时被执行的函数的名称
PostBackUrl当 Button 控件被点击时从当前页面传送数据的目标页面
runat该控件是服务器控件必须设置为 “server”
Text按钮上的文本
UseSubmitBehavior一个值,决定按钮使用浏览器的提交机制(True),还是使用 ASP.NET 的 postback 机制(FALSE)
ValidationGroup当按钮回传服务器时,该按钮所属的那个控件组引发了验证

编程题(填空题/大题)

for 循环求用户输入的整数范围内的奇数之和与偶数之和

题目

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
protected void Button1_Click(object sender, EventArgs e)
{
    // 解析用户输入的起止数
    int Num1 = int.Parse(txtNum1.Text);
    int Num2 = int.Parse(txtNum2.Text);

    // 调用计算函数
    if (Num1 < Num2) 
    {
	    (1)
    } else 
    {
		(2)   
    }
}

void Cal(int x, int y)
{
    int sumeven = 0, sumodd = 0;
    for (int i = (3))
    {
        if ((4))
        {
	        (5)
        }
        else
        {
            (6)
        }
    }

    // 更新界面显示结果
    Label1.Text = x.ToString() + "至" + y.ToString() + "的奇数之和为" + sumodd.ToString();
    Label2.Text = x.ToString() + "至" + y.ToString() + "的偶数之和为" + sumeven.ToString();
}

答案

  1. Cal(Num1, Num2);
  2. Cal(Num2, Num1);
  3. x; i <= y; i++
  4. i % 2 == 0
  5. sumeven += i;
  6. sumodd += i;

while 循环产生10以内的随机整数,如果随机整数是9的话就结束循环

代码

1
2
3
4
5
6
7
int i = 0;
(1)
while(i (2) 9)
{
     i = (3);
     Response.Write(i.(4) + "<br/>");
}

答案

  1. Random r = new Random();
  2. !=
  3. r.Next(10)
  4. ToString()

for 循环嵌套九九乘法表

题目

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
protected void Page_Load(object sender, EventArgs e)
{
    this.Title = "for循环嵌套";
    string expression = "";
    string space = "";
    int result;

    for (int i = 1; i <= (1); i++)
    {
        for (int j = 1; j <= (2); j++)
        {
            result = (3);
            expression = i.ToString() + "x" + j.ToString() + "=" + result.ToString();
            
            if (i * j < 10)
            {
	            // 三个空格
                space = "   ";
            }
            else
            {
	            // 两个空格
                space = "  ";
            }
            
            Label1.Text = (4) + expression + space;
        }
        Label1.Text = Label1.Text + "(5)";
    }
}

答案

  1. 9
  2. i
  3. i * j
  4. Label1.Text
  5. <br/>

代码段(填空题)

生成一个 10 以内的随机整数

1
2
Random num = new Random();
int i = num.next(10);

生成一个 data 类型的数组 pro,存放一百个数

1
data[] pro = new data[100];

数据库

连接字符串

对于SQL Server,连接字符串通常包括服务器地址、数据库名、用户ID和密码。 例如: Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword; 如果使用Windows身份验证,则不需要提供用户ID和密码,可以使用: Server=myServerAddress;Database=myDataBase;Trusted_Connection=True; 对于MySQL,连接字符串可能看起来像这样: Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

代码

连接 MySQL 数据库并执行语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// 连接字符串是必需的
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
// 创建 Connection 连接对象
MySqlConnection connection = new MySqlConnection(connectionString);
// 建立连接
connection.open();
// SQL 语句
string query = "SELECT * FROM t1";
// 实例化 Command 对象,第一个参数是 SQL 语句,第二个参数是 Connection 对象
MySqlCommand command = new MySqlCommand(query, connection);
// 执行命令,实例化 DataReader 对象
MySqlDataReader dataReader = command.ExecuteReader();
// 设置 GridView 的数据源
GridView1.DataSource = dataReader;
// 绑定数据到 GridView 控件
GridView1.DataBind();
// 关闭连接
connection.close();

如果是连接到 SQL Server 数据库 MySqlConnection -> SqlConnection MySqlCommand -> SqlCommand MySqlDataReader -> SqlDataReader

aspx 页面代码

题目

Default.aspx 页面代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<head>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
    <div>
        <div id="top">标题Logo栏</div>
        <div id="(1)">导航栏</div>
        <div id="(2)">左边</div>
        <div id="(2)">中间</div>
        <div id="(4)">右边</div>
        <div id="(5)">页脚</div>
    </div>
</body>

StyleSheet.css 样式表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
div {
    /* 格式:属性名:值; */
    box-sizing: border-box;
    (6) /* 宽度100% */
    (7) /* 文本居中对齐 */
    (8) /* 边框绿色、1像素宽、实线 */
}

#top {
    width: 100%; /* (9) */
    (10) /* 高度56像素 */
    (11) /* 垂直居中 */
    (12) /* 字体黑体 */
    (13) /* 字号xx-large */
}

#navigation {
    (14) /* 设置宽度与#top相同 */
    (15) /* 高度24像素 */
    (16) /* 文字垂直居中 */
}

#left {
    width: 10%;
    height: 104px;
    line-height: 104px;
    (17) /* 元素左浮动 */
}

#mid {
    width: 80%;
    height: 104px;
    line-height: 104px;
    float: left;
}

#right {
    width: 10%;
    height: 104px;
    line-height: 104px;
    float: left;
    (18) /* 不允许元素的右边有浮动元素 */
}

#bottom {
    width: 100%;
    height: 24px;
    line-height: 24px;
    font-family: 黑体;
    (19) /* 不允许元素的左右两边有浮动元素 */
}

答案

  1. navigation
  2. left
  3. mid
  4. right
  5. bottom
  6. width: 100%;
  7. text-align: center;
  8. border: 1px solid #00ff00;
  9. 宽度 100%;
  10. height: 56px;
  11. line-height: 56px;
  12. font-family: 黑体;
  13. font-size: xx-large;
  14. width: 100%;
  15. height: 24px;
  16. line-height: 24px;
  17. float: left;
  18. clear: right;
  19. clear: both;

简答题

Asp.net 内置对象有哪些?

  1. Application - 代表当前Web应用程序的全局对象。它用于存储和管理对所有用户会话全局的信息。
  2. Page - 代表 ASP.NET 页面的类实例,是所有页面请求的基础。它提供了许多方法和属性,用于管理页面的生命周期、处理事件等。
  3. Request - 提供对客户端发出的 HTTP 请求的详细信息的访问,包括查询字符串、参数、Cookies、头部等。
  4. Response - 用于向客户端发送 HTTP 响应数据。可以用它来发送输出到客户端、控制响应缓存、设置Cookies等。
  5. Session - 代表用户会话的对象。此对象用于存储和管理与特定用户会话相关的信息。
  6. Server - 提供对一组用于处理Web请求的方法的访问,如URL编码和解码、路径映射等。

实现页面跳转的6种方法

  1. 超链接 (Anchor Tag): 使用HTML的 <a> 标签创建超链接,是最基本的页面跳转方式。用户点击链接时,浏览器会导航到 href 属性指定的URL。

  2. HyperLink 控件: ASP.NET 提供的 HyperLink 控件,功能类似于HTML的 <a> 标签,但它允许在服务器端设置目标URL。

  3. Button 按钮: 使用按钮控件,并在其点击事件处理器中进行页面跳转。这通常通过JavaScript或服务器端代码实现。

  4. Response.Redirect: 在ASP.NET中,Response.Redirect 方法用于服务器端重定向用户到新的URL。这会发送一个HTTP重定向到客户端。

  5. Server.ExecuteServer.Execute 方法用于在服务器上执行另一个页面的处理,但不改变浏览器的URL。这可以用于在服务器端包含一个页面的输出。

  6. Server.TransferServer.Transfer 方法也是在服务器端进行页面跳转,它终止当前页面的执行并开始执行新页面。与 Server.Execute 不同,Server.Transfer 不会返回到原始页面。

C/S与B/S架构的比较?

定义与特点

C/S架构(Client/Server):全称客户端/服务器架构,是一种典型的两层架构,包括客户端和服务器两部分。客户端负责用户界面和用户交互,服务器负责业务逻辑和数据处理。C/S架构具有高性能、灵活性、可扩展性等特点。 B/S架构(Browser/Server):全称浏览器/服务器架构,是随着Internet技术的兴起,对C/S架构的一种变化或改进。应用程序被分为客户端(浏览器)和服务器两部分,客户端负责显示界面和用户交互,服务器负责业务逻辑和数据处理。B/S架构的特点包括方便使用、易于维护、兼容性好等。

应用环境

C/S架构主要应用于局域网内,适用于需要高性能、复杂数据处理和大规模并发的应用场景,如桌面应用、游戏等。 B/S架构主要应用于广域网中,适用于数据量较小、并发量不高的应用场景,如网上购物、在线银行等。B/S架构的客户端只需安装浏览器,具有更好的通用性和更小的应用环境依赖性。

安全性

C/S架构一般面向相对固定的用户群,对信息安全的控制能力很强,适用于安全性要求较高的信息系统。 B/S架构建立在广域网之上,对安全的控制能力相对较弱,面向的用户范围较广。

维护与升级

C/S架构的维护升级相对困难,需要整体考察和处理出现的问题以及系统升级。 B/S架构的维护升级相对简单,客户端只需通过浏览器访问,服务器端可以方便地进行维护和升级。

软件重用性

C/S架构的构件重用性相对较差,因为需要考虑整体性和不同操作系统、硬件环境的兼容性。 B/S架构的构件相对独立,具有较好的重用性。

技术发展趋势

C/S架构虽然在一些特定领域仍具有优势,但随着网络技术的发展和Web技术的成熟,其应用范围逐渐受到B/S架构的挑战。 B/S架构由于其方便性、易用性和跨平台性等特点,逐渐成为信息系统应用发展的趋势。

APP_Code, APP_Data

APP_Code 通常是一个用于存放应用程序代码的文件夹。在ASP.NET Web Forms中,将代码文件(如C#或VB.NET的代码文件)放在 App_Code 文件夹中,可以让这些代码在运行时动态编译,并且这些代码文件对于整个Web应用程序都是可见的。这提供了一种将代码与Web页面分离的方法,使得代码更加模块化且易于管理。然而,在ASP.NET MVC和其他现代Web开发框架中,开发者更倾向于使用单独的类库项目来组织代码,而不是使用 App_Code 文件夹。 APP_Data 通常是一个用于存放应用程序数据的文件夹。这里的“数据”可以是多种形式的,包括数据库文件(如SQL Server CE的 .sdf 文件)、XML文件、配置文件、日志文件等。将数据文件放在 App_Data 文件夹中是一种组织数据的好方法,它使得数据文件与Web应用程序的其他部分(如页面、图像和脚本)分开。此外,某些Web服务器配置可能会限制对Web根目录之外文件的访问,而 App_Data 文件夹通常位于Web根目录内,因此可以更容易地访问其中的文件。

Page对象

创建和添加控件

1
2
3
Image p = new Image();
p.ImageUrl = "捕获.JPG";
this.Controls.Add(p);

获取ControlCollection对象

该对象表示UI(用户接口)层次结构中指定服务器控件的子控件。

页面回发检测

IsPostBack 返回一个布尔值,表示页面是为响应客户端回发而再次加载的。false 表示首次加载,不是回发。

1
2
3
4
if (!IsPostBack)
{
    // 首次加载时执行的代码
}

弹出消息框

使用 RegisterClientScriptBlock 向浏览器弹出一个消息框。

常用方法

  • DataBind() - 数据绑定。
  • FindControl(id) - 根据ID查找控件。

Page对象的Load事件与Init事件的比较

  • Load事件:在初次加载及每次回发中都会被触发。
  • Page Init事件:只有在页面初始化时被触发一次。

Request对象

说明

  • Form:获取窗体变量集合。
  • UserHostName:获取远程客户端的DNS名称。
  • UserHostAddress:获取远程客户端主机IP地址。

常用属性和方法

  • MapPath:将虚拟路径映射到物理路径。
  • SaveAs:保存上传的文件。

Response对象

说明

  • Cache:获取Web页的缓存策略。
  • Charset:获取或设置输出流的HTTP字符集。
  • Cookies:获取响应Cookie集合,通过该属性可将Cookie信息写入客户端浏览器。
  • Write:将信息写入HTTP输出内容流。

示例

1
2
3
4
5
6
7
8
9
Response.Write("欢迎访问<br/>");
Response.Write("<span style='color:blue;font-family:黑体;font-size:20px'>欢迎访问我的网站</span>");
string today = DateTime.Now.ToLongDateString();
Response.Write(today);
Response.Write("欢迎访问<br/>");
Response.Write("<a href='http://www.163.com' target='_blank'>访问网易</a><br>");
Response.Write("\"Welcome to my home.\"<br/>");
Response.Write("<script language='javascript'>alert('操作成功!');</script><br/>");
Response.Write("<a href='javascript:window.close();'>关闭窗口</a>");

Server对象

说明

  • Execute(path):跳转到path指定的另一页面,在另一页面执行完毕后返回当前页。
  • Transfer(path):终止当前页面的执行,并为当前请求开始执行path指定的新页。
  • MapPath(path):返回与Web服务器上的指定虚拟路径相对应的物理文件路径。
  • HtmlEncode(str):将字符串中包含的Html标记直接显示出来。
  • HtmlEncode()和HtmlDecode()方法用于对包含HTML标记的字符串进行编码和解码操作。二者互为反操作。

示例

1
2
3
Server.HtmlEncode(string);
Response.Write(Server.MapPath("~/Images/aa.gif"));
Response.Write(Server.HtmlEncode("<a href='http://www.baidu.com'>百度</a>"));
0%