MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

C#中的ASP.NET Web应用开发入门

2022-03-276.8k 阅读

1. 认识ASP.NET Web应用开发

1.1 ASP.NET概述

ASP.NET是由微软开发的一个开源的服务器端Web应用程序框架,用于生成动态Web页面、Web应用程序和Web服务。它建立在.NET Framework之上,利用了C#、VB.NET等编程语言强大的功能。ASP.NET提供了一种基于组件的编程模型,使得开发人员可以快速构建功能丰富、可扩展且安全的Web应用。

在ASP.NET中,Web页面以.aspx为扩展名,这些页面可以包含HTML标记、服务器控件以及服务器端代码。服务器端代码能够与数据库交互、处理用户输入、生成动态内容等。与传统的ASP(Active Server Pages)相比,ASP.NET具有更好的性能、更强的可扩展性和更易于维护的代码结构。

1.2 C#与ASP.NET的结合

C#是一种现代、类型安全的编程语言,与ASP.NET紧密集成。使用C#进行ASP.NET开发,可以充分利用C#的特性,如强类型检查、面向对象编程(OOP)特性(封装、继承、多态)等。

例如,在ASP.NET应用中,我们可以创建C#类来封装业务逻辑。假设我们有一个简单的用户登录功能,我们可以创建一个User类来表示用户信息:

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
}

然后在ASP.NET页面的后台代码中使用这个类来处理用户登录逻辑。这种面向对象的编程方式使得代码结构清晰,易于维护和扩展。

2. 搭建ASP.NET Web应用开发环境

2.1 安装Visual Studio

Visual Studio是微软提供的一款功能强大的集成开发环境(IDE),广泛用于.NET开发。可以从微软官方网站下载Visual Studio安装包,在安装过程中,选择安装".NET桌面开发"和"ASP.NET和Web开发"工作负载。这两个工作负载包含了开发ASP.NET Web应用所需的工具、模板和运行时环境。

2.2 创建第一个ASP.NET项目

打开Visual Studio,选择"创建新项目"。在项目模板中,选择"ASP.NET Web应用程序",然后点击"下一步"。在配置新项目的页面,输入项目名称和位置,选择目标框架(通常选择最新的稳定版本,如.NET 6.0),点击"创建"。

在项目创建对话框中,选择"Web应用程序(模型 - 视图 - 控制器)"模板(如果想使用MVC架构,也可以选择空模板,然后手动搭建架构)。MVC(Model - View - Controller)是一种常用的软件架构模式,将应用程序分为三个主要部分:模型(Model)用于表示数据和业务逻辑,视图(View)用于呈现数据给用户,控制器(Controller)用于处理用户请求并协调模型和视图。

3. ASP.NET Web页面基础

3.1 页面结构

一个典型的ASP.NET Web页面由两部分组成:标记部分(.aspx文件)和代码部分(.aspx.cs文件,对于VB.NET则是.aspx.vb文件)。

标记部分包含HTML标记、服务器控件以及服务器端代码块。例如,下面是一个简单的ASP.NET页面标记:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>My First ASP.NET Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="lblMessage" runat="server" Text="Hello, World!"></asp:Label>
        </div>
    </form>
</body>
</html>

在这个页面中,<%@ Page %>指令指定了页面使用的编程语言为C#,关联的代码文件为Default.aspx.cs,继承的类为_Default<form runat="server">标记定义了一个服务器端表单,<asp:Label>是一个服务器控件,用于在页面上显示文本。

3.2 服务器控件

服务器控件是ASP.NET的重要组成部分,它们在服务器端运行,并生成HTML输出发送到客户端浏览器。服务器控件分为多种类型,如文本框(TextBox)、按钮(Button)、标签(Label)、下拉列表(DropDownList)等。

例如,添加一个文本框和按钮来实现简单的用户输入和处理:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>User Input Example</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txtInput" runat="server"></asp:TextBox>
            <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
            <asp:Label ID="lblResult" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>

然后在后台代码Default.aspx.cs中处理按钮点击事件:

using System;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        string input = txtInput.Text;
        lblResult.Text = "You entered: " + input;
    }
}

在这个例子中,当用户点击按钮时,btnSubmit_Click方法被调用,获取文本框中的输入内容,并显示在标签上。

4. 数据访问与数据库交互

4.1 ADO.NET简介

ADO.NET是.NET Framework中用于数据访问的技术。它提供了一组类,用于连接到数据库、执行SQL命令、获取和操作数据。ADO.NET支持多种数据库,如SQL Server、MySQL、Oracle等。

主要的ADO.NET对象包括Connection(用于建立与数据库的连接)、Command(用于执行SQL命令)、DataReader(用于从数据库中读取只进、只读的数据)和DataAdapter(用于在数据库和数据集之间进行数据传输)。

4.2 连接SQL Server数据库

假设我们有一个SQL Server数据库,并且有一个Employees表,包含IdNameSalary字段。下面是使用ADO.NET连接数据库并读取数据的示例:

using System;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

public partial class EmployeesPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string query = "SELECT Id, Name, Salary FROM Employees";
            SqlCommand command = new SqlCommand(query, connection);
            try
            {
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                GridView1.DataSource = reader;
                GridView1.DataBind();
                reader.Close();
            }
            catch (SqlException ex)
            {
                Label1.Text = "Error: " + ex.Message;
            }
        }
    }
}

在标记部分,我们添加一个GridView控件来显示数据:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="EmployeesPage.aspx.cs" Inherits="EmployeesPage" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Employees List</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server"></asp:GridView>
            <asp:Label ID="Label1" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>

在这个例子中,我们使用SqlConnection建立与SQL Server数据库的连接,使用SqlCommand执行SQL查询,通过SqlDataReader读取数据,并将数据绑定到GridView控件上显示。

4.3 使用Entity Framework进行数据访问

Entity Framework是一个对象关系映射(ORM)框架,它简化了数据访问层的开发。通过Entity Framework,开发人员可以使用对象模型来操作数据库,而不必编写大量的SQL语句。

首先,需要安装Entity Framework NuGet包。在Visual Studio中,右键点击项目,选择"管理NuGet程序包",搜索并安装Microsoft.EntityFrameworkCore和对应的数据库提供程序包(如Microsoft.EntityFrameworkCore.SqlServer用于SQL Server数据库)。

假设我们有一个Employee实体类:

using System.ComponentModel.DataAnnotations;

public class Employee
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Salary { get; set; }
}

然后创建一个DbContext类来管理数据库上下文:

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    public DbSet<Employee> Employees { get; set; }
}

Startup.cs文件中配置数据库连接和Entity Framework:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AppDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddControllersWithViews();
    }

    // Other Configure methods...
}

appsettings.json文件中添加数据库连接字符串:

{
    "ConnectionStrings": {
        "DefaultConnection": "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD"
    },
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*"
}

现在就可以在控制器中使用Entity Framework来操作数据库了,例如:

using Microsoft.AspNetCore.Mvc;
using System.Linq;
using YourNamespace.Data;

public class EmployeesController : Controller
{
    private readonly AppDbContext _context;

    public EmployeesController(AppDbContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        var employees = _context.Employees.ToList();
        return View(employees);
    }
}

在视图中可以遍历并显示员工数据。通过Entity Framework,代码变得更加简洁和面向对象,减少了手动编写SQL语句的工作量。

5. ASP.NET MVC架构

5.1 MVC模式原理

如前文所述,MVC模式将应用程序分为模型、视图和控制器三个部分。模型负责表示数据和业务逻辑,例如前面提到的Employee类就是模型的一部分,它定义了员工的数据结构和可能的业务规则(如数据验证)。

视图负责将模型中的数据呈现给用户,通常以HTML页面的形式。视图不包含业务逻辑,只专注于数据的展示。例如,在显示员工列表的视图中,它从控制器获取员工数据,并以表格等形式展示出来。

控制器负责处理用户请求,从视图获取输入数据,调用模型的方法进行业务处理,然后选择合适的视图来显示结果。例如,当用户请求查看员工列表时,控制器从数据库(通过模型)获取员工数据,然后将数据传递给对应的视图进行显示。

5.2 创建MVC项目结构

在Visual Studio中创建一个ASP.NET MVC项目后,会自动生成基本的项目结构。其中,Controllers文件夹存放控制器类,Models文件夹存放模型类,Views文件夹存放视图文件。

例如,创建一个简单的HomeController

using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

Views/Home文件夹下创建Index.cshtml视图文件:

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <h1>Welcome to our MVC App</h1>
</div>

当用户访问网站根目录时,HomeControllerIndex方法被调用,它返回Index.cshtml视图,用户在浏览器中看到的就是该视图呈现的内容。

5.3 控制器与视图之间的数据传递

控制器可以将数据传递给视图,以便视图进行展示。常见的方式有使用ViewBagViewData和强类型视图模型。

ViewBag是一个动态对象,可以在控制器中设置属性,在视图中访问。例如:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewBag.Message = "This is a message from controller";
        return View();
    }
}

在视图中:

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <p>@ViewBag.Message</p>
</div>

ViewData是一个字典对象,同样可以用于传递数据:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewData["Message"] = "This is another message";
        return View();
    }
}

在视图中:

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <p>@ViewData["Message"]</p>
</div>

强类型视图模型则更加类型安全和可维护。首先定义一个视图模型类:

public class HomeViewModel
{
    public string Message { get; set; }
}

在控制器中:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var model = new HomeViewModel
        {
            Message = "This is a strong - typed view model message"
        };
        return View(model);
    }
}

在视图中,需要指定模型类型:

@model YourNamespace.Models.HomeViewModel

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <p>@Model.Message</p>
</div>

通过强类型视图模型,在视图中可以获得更好的代码智能提示,提高代码的准确性和可维护性。

6. 部署ASP.NET Web应用

6.1 发布到IIS

IIS(Internet Information Services)是微软的Web服务器,常用于部署ASP.NET应用。

首先,在Visual Studio中右键点击项目,选择"发布"。在发布向导中,选择"文件夹"发布目标,指定一个本地文件夹路径,点击"发布"。这将生成发布所需的文件,包括编译后的代码、静态文件等。

然后,打开IIS管理器(可以在控制面板 - 管理工具中找到)。在左侧的"连接"面板中,右键点击"网站",选择"添加网站"。在"添加网站"对话框中,输入网站名称,选择刚才发布的文件夹作为物理路径,指定一个端口号(如8080,如果80端口被占用),点击"确定"。

此时,在浏览器中输入http://localhost:8080(如果使用8080端口),就可以访问部署的ASP.NET应用了。

6.2 部署到Azure

Azure是微软的云计算平台,提供了方便的ASP.NET应用部署方式。

同样在Visual Studio中右键点击项目选择"发布",在发布目标中选择"Azure App Service"。按照向导提示,登录到Azure账号,选择或创建一个App Service实例。创建过程中需要选择资源组、操作系统、定价层等选项。

完成发布后,就可以通过Azure提供的URL访问应用。Azure还提供了自动缩放、监控、日志记录等功能,方便应用的运维和管理。

通过以上步骤,我们对C#中的ASP.NET Web应用开发有了一个较为全面的入门了解。从基础的页面结构、服务器控件,到数据访问、MVC架构,再到应用的部署,每个环节都是构建一个完整、健壮的ASP.NET Web应用不可或缺的部分。在实际开发中,还需要不断学习和实践,深入掌握各种技术细节,以开发出满足业务需求的高质量Web应用。