在 .NET 生态中,开发网页应用(Web Forms)的语言是 Visual Basic.NET (VB.NET),但开发网页 API(后端服务)的主流语言是 C#。 VB.NET 依然完全支持 Web Forms 开发,并且对于 VB.NET 这是一个非常自然的入门选择。

vb.net 网页开发实例教程
(图片来源网络,侵删)

本教程将带你使用 ASP.NET Web Forms 技术和 VB.NET 语言,从零开始创建一个功能完整的个人博客网站。


第一部分:基础概念与准备工作

什么是 ASP.NET Web Forms?

想象一下盖房子:

  • HTML 是房子的砖瓦、钢筋和水泥,构成基本结构。
  • CSS 是房子的装修和粉刷,决定外观和风格。
  • JavaScript 是房子的水电、智能家居系统,负责交互和动态行为。
  • ASP.NET Web Forms 则像是一整套先进的建筑工具和预制件,你可以:
    • 使用 服务器控件(如 Button, TextBox, GridView)像搭积木一样快速构建功能。
    • 使用 事件驱动模型(如 Button_Click),像编写 Windows 窗体应用一样编写网页逻辑,非常直观。
    • 视图状态 自动帮你管理控件的状态,即使页面刷新,用户输入的内容也不会丢失。

开发环境准备

你需要安装以下软件:

  1. Visual Studio: 这是微软官方的集成开发环境,我们使用 Visual Studio Community (社区版),它是免费的。

第二部分:创建第一个 ASP.NET Web Forms 项目

步骤 1: 新建项目

  1. 打开 Visual Studio。

    vb.net 网页开发实例教程
    (图片来源网络,侵删)
  2. 点击 “创建新项目”。

  3. 在模板搜索框中输入 ASP.NET Web Application,选择模板(确保语言是 Visual Basic),然后点击 “下一步”。

  4. 为你的项目命名,MyFirstBlog,并选择一个位置。

  5. 在下一个窗口中,选择 “Web Forms” 模板,然后点击 “创建”。

    vb.net 网页开发实例教程
    (图片来源网络,侵删)

Visual Studio 会为你创建一个包含默认页面的项目结构。

步骤 2: 熟悉项目结构

打开 “解决方案资源管理器”,你会看到以下关键文件和文件夹:

  • Default.aspx: 默认的主页,它包含了 HTML 和服务器控件。
  • Default.aspx.vb: 这是 Default.aspx 的后台代码文件,所有 VB.NET 逻辑都在这里。
  • Web.config: 网站的配置文件,用于存储数据库连接字符串、应用程序设置等。
  • Site.Master: 一个母版页,它定义了网站的通用布局(如头部、导航栏、页脚),其他页面可以继承这个布局,避免重复代码。
  • App_Data: 用于存放数据库文件(如 .mdf, .sdf)。
  • Images, Scripts, Styles: 分别存放图片、JavaScript 文件和 CSS 样式表。

第三部分:实例教程 - 构建一个简单的个人博客

我们将实现以下功能:

  1. 显示博客文章列表。
  2. 点击文章标题,查看文章详情。
  3. 一个简单的后台管理页面,用于添加新文章。

第 1 步:创建数据模型和数据库

  1. 添加数据模型类 在 “解决方案资源管理器” 中右键点击项目 -> 添加 -> 新建项。 选择 “类”,命名为 Post.vb

    ' Post.vb
    Public Class Post
        Public Property Id As Integer
        Public Property Title As String
        Public Property Content As String
        Public Property PublishDate As DateTime
    End Class
  2. 创建数据访问逻辑 为了简单起见,我们使用一个静态类来模拟数据库操作,在实际项目中,你会使用 Entity Framework 或 ADO.NET 连接真实的数据库。

    在项目中添加一个新类,命名为 PostService.vb

    ' PostService.vb
    Public Class PostService
        ' 使用一个静态列表来模拟数据库
        Private Shared _posts As New List(Of Post)
        ' 构造函数,初始化一些示例数据
        Shared Sub New()
            _posts.Add(New Post With {
                .Id = 1,
                .Title = "欢迎来到我的博客!",
                .Content = "这是我的第一篇博客文章,感谢你访问我的网站,希望我们能在这里分享很多有趣的内容。",
                .PublishDate = DateTime.Now.AddDays(-5)
            })
            _posts.Add(New Post With {
                .Id = 2,
                .Title = "学习 VB.NET 网页开发",
                .Content = "ASP.NET Web Forms 是一个强大的框架,它让 VB.NET 开发者能够快速构建功能强大的网站,事件驱动模型是其最大的特点。",
                .PublishDate = DateTime.Now.AddDays(-2)
            })
            _posts.Add(New Post With {
                .Id = 3,
                .Title = ".NET 的新特性",
                .Content = ".NET 5/6/7/8 是一个跨平台的框架,虽然 Web Forms 不是其核心,但 VB.NET 生态依然活跃。",
                .PublishDate = DateTime.Now.AddDays(-1)
            })
        End Sub
        ' 获取所有文章
        Public Shared Function GetAllPosts() As List(Of Post)
            Return _posts.OrderByDescending(Function(p) p.PublishDate).ToList()
        End Function
        ' 根据ID获取文章
        Public Shared Function GetPostById(id As Integer) As Post
            Return _posts.FirstOrDefault(Function(p) p.Id = id)
        End Function
        ' 添加新文章
        Public Shared Sub AddPost(post As Post)
            ' 在实际应用中,这里会有更复杂的逻辑,比如生成新ID
            post.Id = _posts.Count + 1
            post.PublishDate = DateTime.Now
            _posts.Add(post)
        End Sub
    End Class

第 2 步:在主页显示文章列表

  1. 打开 Default.aspx,切换到 “源” 视图。

  2. 删除默认的 <asp:Content>

  3. <asp:Content> 标签内,添加一个 asp:Repeater 控件,Repeater 是一个非常灵活的模板控件,可以让我们自定义列表的显示方式。

    <%@ Page Title="首页" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
        <h1>我的博客文章</h1>
        <hr />
        <asp:Repeater ID="PostsRepeater" runat="server">
            <ItemTemplate>
                <div class="post-item">
                    <h2>
                        <!-- 使用 HyperLink 控件创建链接 -->
                        <asp:HyperLink ID="TitleLink" runat="server" 
                                       NavigateUrl='<%# "PostDetails.aspx?Id=" & Eval("Id") %>' 
                                       Text='<%# Eval("Title") %>' />
                    </h2>
                    <p class="post-date">
                        发布于: <%# Eval("PublishDate", "{0:yyyy-MM-dd}") %>
                    </p>
                    <p>
                        <!-- 只显示文章摘要 -->
                        <%# Eval("Content") %>
                    </p>
                </div>
            </ItemTemplate>
        </asp:Repeater>
    </asp:Content>
  4. 编写后台代码 Default.aspx.vb,将数据绑定到 Repeater 控件。

    ' Default.aspx.vb
    Partial Class _Default
        Inherits System.Web.UI.Page
        ' 页面加载时执行
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' 如果是第一次加载页面
            If Not IsPostBack Then
                ' 获取所有文章
                Dim allPosts As List(Of Post) = PostService.GetAllPosts()
                ' 将数据源绑定到 Repeater 控件
                PostsRepeater.DataSource = allPosts
                PostsRepeater.DataBind()
            End If
        End Sub
    End Class
  5. 添加一些样式 打开 Site.css 文件(在 Styles 文件夹中),添加一些简单的 CSS 来美化列表。

    /* Site.css */
    .post-item {
        border: 1px solid #ddd;
        padding: 15px;
        margin-bottom: 20px;
        border-radius: 5px;
    }
    .post-item h2 {
        margin-top: 0;
    }
    .post-date {
        color: #888;
        font-size: 0.9em;
        font-style: italic;
    }
    .post-item a {
        color: #0056b3;
        text-decoration: none;
    }
    .post-item a:hover {
        text-decoration: underline;
    }

运行你的项目(按 F5),你应该能看到一个包含两篇文章列表的首页。

第 3 步:创建文章详情页

  1. 添加新页面 在 “解决方案资源管理器” 中右键点击项目 -> 添加 -> 新建项。 选择 “Web 窗体”,命名为 PostDetails.aspx,确保勾选 “选择母版页”。

  2. 设计 PostDetails.aspx 页面 打开 PostDetails.aspx,在 MainContent 中添加以下内容:

    <%@ Page Title="文章详情" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeFile="PostDetails.aspx.vb" Inherits="PostDetails" %>
    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
        <h1><asp:Label ID="PostTitleLabel" runat="server" Text="标题"></asp:Label></h1>
        <p class="post-date">
            发布于: <asp:Label ID="PostDateLabel" runat="server" Text="日期"></asp:Label>
        </p>
        <hr />
        <div class="post-content">
            <asp:Label ID="PostContentLabel" runat="server" Text="内容"></asp:Label>
        </div>
    </asp:Content>
  3. 编写后台代码 PostDetails.aspx.vb 我们需要从 URL 的查询字符串中获取文章 ID,然后找到对应的文章并显示出来。

    ' PostDetails.aspx.vb
    Partial Class PostDetails
        Inherits System.Web.UI.Page
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                ' 从 URL 的查询字符串中获取 Id
                Dim postId As Integer
                If Integer.TryParse(Request.QueryString("Id"), postId) Then
                    ' 根据Id获取文章
                    Dim post As Post = PostService.GetPostById(postId)
                    If post IsNot Nothing Then
                        ' 将文章数据绑定到页面上的 Label 控件
                        PostTitleLabel.Text = post.Title
                        PostDateLabel.Text = post.PublishDate.ToString("yyyy-MM-dd")
                        PostContentLabel.Text = post.Content
                    Else
                        ' 如果文章不存在,显示错误信息
                        PostTitleLabel.Text = "文章未找到"
                        PostContentLabel.Text = "抱歉,您请求的文章不存在或已被删除。"
                    End If
                Else
                    ' Id 无效
                    Response.Redirect("Default.aspx")
                End If
            End If
        End Sub
    End Class

回到首页,点击文章标题,你应该能跳转到对应的详情页了。

第 4 步:创建后台管理页面(添加文章)

  1. 添加新页面 创建一个名为 Admin/AddPost.aspx 的新 Web 窗体。

  2. 设计 AddPost.aspx 页面 添加一个表单,包含标题、内容输入框和提交按钮。

    <%@ Page Title="添加文章" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeFile="AddPost.aspx.vb" Inherits="Admin_AddPost" %>
    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
        <h1>添加新文章</h1>
        <hr />
        <div class="form-group">
            <asp:Label ID="titleLabel" runat="server" Text="标题:"></asp:Label>
            <asp:TextBox ID="titleTextBox" runat="server" CssClass="form-control"></asp:TextBox>
        </div>
        <div class="form-group">
            <asp:Label ID="contentLabel" runat="server" Text="内容:"></asp:Label>
            <asp:TextBox ID="contentTextBox" runat="server" TextMode="MultiLine" Rows="10" CssClass="form-control"></asp:TextBox>
        </div>
        <asp:Button ID="submitButton" runat="server" Text="发布文章" CssClass="btn btn-primary" OnClick="submitButton_Click" />
    </asp:Content>
  3. 编写后台代码 AddPost.aspx.vb 处理按钮的点击事件,获取输入内容,并调用 PostService 保存。

    ' AddPost.aspx.vb
    Partial Class Admin_AddPost
        Inherits System.Web.UI.Page
        Protected Sub submitButton_Click(sender As Object, e As EventArgs) Handles submitButton.Click
            ' 验证输入
            If String.IsNullOrWhiteSpace(titleTextBox.Text) OrElse String.IsNullOrWhiteSpace(contentTextBox.Text) Then
                ' 使用客户端脚本显示警告
                ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('标题和内容不能为空!');", True)
                Return
            End If
            ' 创建一个新的 Post 对象
            Dim newPost As New Post()
            newPost.Title = titleTextBox.Text
            newPost.Content = contentTextBox.Text
            ' 调用服务层添加文章
            PostService.AddPost(newPost)
            ' 添加成功后,重定向到首页
            Response.Redirect("~/Default.aspx")
        End Sub
    End Class
  4. 添加一个管理入口 为了方便,我们在 Site.Master 的导航栏里加一个链接。

    打开 Site.Master,找到 <nav> 标签,在里面添加一个链接:

    <ul class="nav navbar-nav">
        <li><a runat="server" href="~/">首页</a></li>
        <li><a runat="server" href="~/About">lt;/a></li>
        <li><a runat="server" href="~/Contact">联系方式</a></li>
        <!-- 添加这一行 -->
        <li><a runat="server" href="~/Admin/AddPost.aspx">管理文章</a></li>
    </ul>

运行项目,点击导航栏的 “管理文章”,填写标题和内容,点击 “发布文章”,文章就会出现在首页列表中!


第四部分:总结与进阶

恭喜!你已经使用 VB.NET 和 ASP.NET Web Forms 创建了一个功能完整的博客应用。

本教程涵盖的关键点:

  • 项目创建: 使用 Visual Studio 创建 Web Forms 项目。
  • 页面结构: 理解 .aspx (视图) 和 .aspx.vb (逻辑) 文件的作用。
  • 服务器控件: 使用 Repeater, Label, TextBox, Button 等控件。
  • 数据绑定: 学习 Eval()DataBind() 方法,将数据动态显示在页面上。
  • 事件驱动: 编写 Button_Click 等事件处理函数来响应用户操作。
  • 页面导航: 使用 Response.Redirect 实现页面跳转。
  • 查询字符串: 通过 Request.QueryString 获取 URL 中的参数。
  • 分层思想: 创建 Post (模型) 和 PostService (服务层) 来分离数据和业务逻辑,这是一个良好的编程习惯。

进阶学习方向:

  1. 使用真实数据库: 将 PostService 中的静态列表替换为使用 SQL Server LocalDB (Visual Studio 自带) 和 ADO.NETEntity Framework 的数据库操作。
  2. 会员和角色管理: 学习如何使用 ASP.NET 内置的登录控件,创建需要登录才能访问的管理页面。
  3. 母版页高级用法: 学习如何在母版页中定义 ContentPlaceHolder,并在子页面中动态添加内容。
  4. 部署: 学习如何将你的网站部署到云服务器(如 Azure, IIS)上,让其他人可以访问。

ASP.NET Web Forms 是一个成熟、稳定且开发效率很高的框架,对于 VB.NET 它依然是构建企业级 Web 应用的一个有力选择,希望这个教程能帮助你顺利入门!