这个教程将使用 ASP.NET Web Forms 技术,因为它对于初学者来说非常直观,并且能快速上手,如果您对更现代的 MVC 感兴趣,可以在文末找到指引。

第一步:创建项目和基础结构
我们需要创建一个 ASP.NET Web Forms 项目。
- 打开 Visual Studio。
- 选择 "创建新项目" (Create a new project)。
- 在模板搜索框中输入
ASP.NET Web Application,然后选择它并点击 "下一步"。 - 为你的项目命名,
MyPersonalWebSite,然后点击 "创建"。 - 在下一个窗口中,选择 "Web Forms" 模板,然后点击 "创建"。
Visual Studio 会为你创建一个包含默认文件(如 Default.aspx, Site.master 等)的项目结构,这些文件构成了你网站的基础。
关键文件说明:
Default.aspx: 你的网站首页。Site.master: 母版页,这是一个模板页,定义了所有页面的共同布局(如页头、页脚、导航菜单),其他内容页(如Default.aspx)会“套用”这个模板。Web.config: 网站的配置文件,用于存储数据库连接字符串、应用程序设置等。App_Data: 存放数据文件(如.mdf数据库文件)的文件夹。
第二步:设计母版页 (Site.master)
母版页是网站的骨架,我们在这里设计通用的布局。

打开 Site.master 文件,切换到 "源" (Source) 视图,默认的代码比较复杂,我们可以简化它,创建一个清晰的布局。
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="MyPersonalWebSite.SiteMaster" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head runat="server">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><%: Page.Title %> - 我的个人网站</title>
<!-- 引入 Bootstrap CSS 用于快速美化界面 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/modernizr") %>
</asp:PlaceHolder>
<webopt:BundleReference runat="server" Path="~/Content/css" />
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
</head>
<body>
<form runat="server">
<asp:ScriptManager runat="server">
<Scripts>
<!-- ... 忽略这些脚本,它们用于兼容性 ... -->
</Scripts>
</asp:ScriptManager>
<!-- 1. 页头 -->
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" runat="server" href="~/">我的网站</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item"><a class="nav-link" runat="server" href="~/">首页</a></li>
<li class="nav-item"><a class="nav-link" runat="server" href="~/About.aspx">关于我</a></li>
<li class="nav-item"><a class="nav-link" runat="server" href="~/Contact.aspx">联系方式</a></li>
<li class="nav-item"><a class="nav-link" runat="server" href="~/Blog.aspx">博客</a></li>
</ul>
</div>
</div>
</nav>
</header>
<!-- 2. 内容区域 -->
<div class="container body-content">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
<!-- 3. 页脚 -->
<footer class="border-top footer text-muted">
<div class="container">
© <%: DateTime.Now.Year %> - 我的个人网站
</div>
</footer>
<!-- 引入 Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</form>
</body>
</html>
说明:
- 我们使用了 Bootstrap 框架来快速创建美观的响应式布局和导航栏。
<asp:ContentPlaceHolder ID="MainContent" runat="server">是一个占位符,当你创建一个使用此母版页的页面时,你的页面内容会放在这里。- 导航栏中的
href="~/About.aspx"等链接指向我们将要创建的其他页面。
第三步:创建首页 (Default.aspx)
首页是网站的入口,我们将创建一个包含欢迎语、个人简介和最新博客文章列表的首页。
- 在 "解决方案资源管理器" 中,右键点击项目 -> "添加" -> "新建项"。
- 选择 "Web 窗体",命名为
Default.aspx。 - 确保 "选择母版页" 勾选,并选择
Site.master,然后点击 "添加"。
打开 Default.aspx 的 "源" 视图,删除所有默认内容,然后添加以下代码:

<%@ Page Title="首页" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MyPersonalWebSite._Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div class="jumbotron">
<h1>你好,世界!</h1>
<p class="lead">欢迎来到我的个人网站,我是一名充满热情的开发者,专注于创造优秀的用户体验。</p>
<p><a href="About.aspx" class="btn btn-primary btn-lg">了解更多 »</a></p>
</div>
<div class="row">
<div class="col-md-4">
<h2>关于我</h2>
<p>
这里可以写一段更详细的自我介绍,包括你的技能、兴趣和职业目标。
</p>
<p>
<a class="btn btn-default" href="About.aspx">了解更多 »</a>
</p>
</div>
<div class="col-md-4">
<h2>最新博客</h2>
<p>
查看我最近的技术文章和思考。
</p>
<p>
<a class="btn btn-default" href="Blog.aspx">阅读更多 »</a>
</p>
</div>
<div class="col-md-4">
<h2>联系方式</h2>
<p>
如果你有任何问题或合作意向,请随时与我联系。
</p>
<p>
<a class="btn btn-default" href="Contact.aspx">发送邮件 »</a>
</p>
</div>
</div>
</asp:Content>
说明:
<%@ Page ... %>指令表明这是一个页面,并指定了它的标题和使用的母版页。<asp:Content ...>标签中的内容会被插入到母版页的MainContent占位符中。- 我们使用了 Bootstrap 的
jumbotron,row,col-md-4等类来快速布局。
第四步:创建“关于我”页面 (About.aspx)
这个页面将展示更详细的个人信息。
- 右键点击项目 -> "添加" -> "新建项"。
- 选择 "Web 窗体",命名为
About.aspx,并选择Site.master作为母版页。 - 在
About.aspx中添加内容:
<%@ Page Title="关于我" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="MyPersonalWebSite.About" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<h3>你好,我是张三。</h3>
<p>
我是一名拥有5年经验的 .NET 全栈开发工程师,我热爱编程,享受解决复杂问题带来的成就感。
</p>
<p>
我的技术栈包括:
</p>
<ul>
<li>后端: C#, ASP.NET, .NET Core, Entity Framework</li>
<li>前端: HTML, CSS, JavaScript, jQuery, Bootstrap</li>
<li>数据库: SQL Server, MySQL</li>
<li>其他: Git, Docker, Azure</li>
</ul>
</asp:Content>
第五步:创建“联系方式”页面 (Contact.aspx)
这个页面将包含一个简单的联系表单。
- 右键点击项目 -> "添加" -> "新建项"。
- 选择 "Web 窗体",命名为
Contact.aspx,并选择Site.master作为母版页。 - 在
Contact.aspx中添加内容:
<%@ Page Title="联系方式" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Contact.aspx.cs" Inherits="MyPersonalWebSite.Contact" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<h3>你的联系表单。</h3>
<address>
北京市朝阳区<br />
中国<br />
<abbr title="电话">电话:</abbr>
123.456.7890
</address>
<address>
<strong>支持:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
<strong>市场:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
</address>
<hr />
<h3>或者给我留言:</h3>
<asp:Label ID="lblMessage" runat="server" Text="" ForeColor="Green"></asp:Label>
<div class="form-group">
<asp:Label ID="lblName" runat="server" Text="姓名:" AssociatedControlID="txtName"></asp:Label>
<asp:TextBox ID="txtName" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<asp:Label ID="lblEmail" runat="server" Text="邮箱:" AssociatedControlID="txtEmail"></asp:Label>
<asp:TextBox ID="txtEmail" runat="server" TextMode="Email" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<asp:Label ID="lblBody" runat="server" Text="留言:" AssociatedControlID="txtBody"></asp:Label>
<asp:TextBox ID="txtBody" runat="server" TextMode="MultiLine" Rows="5" CssClass="form-control"></asp:TextBox>
</div>
<asp:Button ID="btnSubmit" runat="server" Text="发送" OnClick="btnSubmit_Click" CssClass="btn btn-primary" />
</asp:Content>
为表单添加后台逻辑 (Contact.aspx.cs):
双击 Contact.aspx 页面上的 "发送" 按钮,Visual Studio 会自动生成 btnSubmit_Click 事件处理函数,在 Contact.aspx.cs 中添加以下代码:
using System;
using System.Net;
using System.Net.Mail;
using System.Web.UI;
namespace MyPersonalWebSite
{
public partial class Contact : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
// 在实际项目中,这里应该进行数据验证
if (string.IsNullOrEmpty(txtName.Text) || string.IsNullOrEmpty(txtEmail.Text) || string.IsNullOrEmpty(txtBody.Text))
{
lblMessage.Text = "请填写所有字段!";
lblMessage.ForeColor = System.Drawing.Color.Red;
return;
}
try
{
// --- 配置邮件发送 ---
// 注意:这里需要你自己的邮箱和密码(或应用专用密码)
// 对于Gmail等邮箱,需要开启“不太安全的应用的访问权限”或使用应用专用密码
string fromEmail = "your_email@gmail.com"; // 你的发件邮箱
string fromPassword = "your_app_password"; // 你的邮箱密码或应用专用密码
string toEmail = "your_email@gmail.com"; // 你想接收邮件的邮箱
var subject = $"来自 {txtName.Text} 的留言";
var body = $"姓名: {txtName.Text}\n邮箱: {txtEmail.Text}\n\n留言内容:\n{txtBody.Text}";
var smtpClient = new SmtpClient("smtp.gmail.com")
{
Port = 587,
Credentials = new NetworkCredential(fromEmail, fromPassword),
EnableSsl = true,
};
using (var mailMessage = new MailMessage(fromEmail, toEmail, subject, body))
{
smtpClient.Send(mailMessage);
}
lblMessage.Text = "留言已成功发送!";
// 清空表单
txtName.Text = "";
txtEmail.Text = "";
txtBody.Text = "";
}
catch (Exception ex)
{
lblMessage.Text = "发送失败,请稍后再试,错误信息: " + ex.Message;
lblMessage.ForeColor = System.Drawing.Color.Red;
}
}
}
}
注意: 发送邮件功能需要真实的 SMTP 服务器配置,上面的代码以 Gmail 为例,你需要替换成你自己的邮箱信息,并确保你的邮箱允许通过这种方式发送邮件。
第六步:创建“博客”页面 (Blog.aspx)
这个页面将展示你的博客文章列表,为了简单起见,我们使用一个静态列表来模拟数据。
- 右键点击项目 -> "添加" -> "新建项"。
- 选择 "Web 窗体",命名为
Blog.aspx,并选择Site.master作为母版页。 - 在
Blog.aspx中添加内容:
<%@ Page Title="博客" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Blog.aspx.cs" Inherits="MyPersonalWebSite.Blog" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: Title %>.</h2>
<p>这里是我最近发表的技术文章。</p>
<asp:Repeater ID="rptBlogPosts" runat="server">
<ItemTemplate>
<div class="media">
<div class="media-body">
<h4 class="media-heading"><a href="Post.aspx?id=<%# Eval("Id") %>"><%# Eval("Title") %></a></h4>
<p><%# Eval("Summary") %></p>
<small>发布于: <%# Eval("PublishDate") %></small>
</div>
</div>
<hr />
</ItemTemplate>
</asp:Repeater>
</asp:Content>
为博客页面添加后台逻辑 (Blog.aspx.cs):
在 Blog.aspx.cs 中,我们将创建一个博客文章列表,并绑定到 Repeater 控件。
using System;
using System.Collections.Generic;
using System.Web.UI;
namespace MyPersonalWebSite
{
public partial class Blog : Page
{
// 定义一个博客文章的简单模型
public class BlogPost
{
public int Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime PublishDate { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 模拟从数据库获取博客文章
List<BlogPost> posts = GetBlogPosts();
// 将数据绑定到 Repeater 控件
rptBlogPosts.DataSource = posts;
rptBlogPosts.DataBind();
}
}
private List<BlogPost> GetBlogPosts()
{
return new List<BlogPost>
{
new BlogPost { Id = 1, Title = "ASP.NET Web Forms 入门指南", Summary = "本文将带你了解 ASP.NET Web Forms 的基本概念和如何创建你的第一个页面。", PublishDate = new DateTime(2025, 10, 26) },
new BlogPost { Id = 2, Title = "C# 中的异步编程详解", Summary = "深入探讨 C# 中的 async/await 关键字,以及如何使用它们来编写高效的异步代码。", PublishDate = new DateTime(2025, 10, 20) },
new BlogPost { Id = 3, Title = "使用 Bootstrap 快速美化你的网站", Summary = "学习如何利用 Bootstrap 框架,轻松创建响应式和美观的网页布局。", PublishDate = new DateTime(2025, 10, 15) }
};
}
}
}
第七步:创建博客文章详情页 (Post.aspx)
当用户点击博客列表中的标题时,会跳转到这个页面来显示文章的完整内容。
- 右键点击项目 -> "添加" -> "新建项"。
- 选择 "Web 窗体",命名为
Post.aspx,并选择Site.master作为母版页。 - 在
Post.aspx中添加内容:
<%@ Page Title="文章详情" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Post.aspx.cs" Inherits="MyPersonalWebSite.Post" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<h2 id="postTitle" runat="server"></h2>
<small id="postDate" runat="server"></small>
<hr />
<div id="postContent" runat="server" class="blog-post-content">
<!-- 文章内容将在这里动态显示 -->
</div>
</asp:Content>
为文章详情页添加后台逻辑 (Post.aspx.cs):
我们需要根据 URL 中的 id 参数来找到对应的文章并显示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
namespace MyPersonalWebSite
{
public partial class Post : Page
{
// 复用 Blog 页面的 BlogPost 模型
public class BlogPost
{
public int Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public string Content { get; set; } // 添加内容属性
public DateTime PublishDate { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int postId;
if (int.TryParse(Request.QueryString["id"], out postId))
{
// 复用 GetBlogPosts 方法,但这次包含完整内容
List<BlogPost> allPosts = GetFullBlogPosts();
BlogPost post = allPosts.FirstOrDefault(p => p.Id == postId);
if (post != null)
{
postTitle.InnerText = post.Title;
postDate.InnerText = "发布于: " + post.PublishDate.ToString("yyyy-MM-dd");
postContent.InnerHtml = post.Content; // 使用 InnerHtml 来显示 HTML 内容
}
else
{
// 如果文章未找到,显示404信息
postTitle.InnerText = "文章未找到";
postContent.InnerText = "抱歉,您访问的文章不存在。";
}
}
else
{
// 如果没有提供ID,重定向到博客列表页
Response.Redirect("Blog.aspx");
}
}
}
private List<BlogPost> GetFullBlogPosts()
{
return new List<BlogPost>
{
new BlogPost {
Id = 1,
Title = "ASP.NET Web Forms 入门指南",
Summary = "本文将带你了解 ASP.NET Web Forms 的基本概念和如何创建你的第一个页面。",
Content = "<p>这是文章的完整内容...</p><p>你可以在这里使用 <strong>HTML</strong> 标签来格式化文本。</p><p>ASP.NET Web Forms 是一个强大的框架,它允许你使用事件驱动的编程模型来构建动态网站。</p>",
PublishDate = new DateTime(2025, 10, 26)
},
new BlogPost {
Id = 2,
Title = "C# 中的异步编程详解",
Summary = "深入探讨 C# 中的 async/await 关键字,以及如何使用它们来编写高效的异步代码。",
Content = "<p>这是另一篇文章的完整内容...</p><p>异步编程是现代应用程序开发中的一个核心概念...</p>",
PublishDate = new DateTime(2025, 10, 20)
}
// 可以添加更多文章...
};
}
}
}
总结与运行
你的个人网站基本框架已经完成!它包含了:
- 响应式布局:使用 Bootstrap 实现。
- 导航系统:通过母版页实现,所有页面共享。
- 首页:展示网站概览。
- 关于我:个人简介页面。
- 联系方式:包含一个功能性的联系表单(需要配置邮件服务器)。
- 博客系统:包含文章列表和详情页。
如何运行:
- 在 Visual Studio 中,按下
F5键。 - 网站将在你的默认浏览器中启动。
- 尝试点击导航栏中的链接,在不同页面之间跳转。
进阶方向
当你掌握了这些基础后,可以探索以下方向来增强你的网站:
- 数据持久化:将博客文章、用户信息等从静态列表改为存储在数据库中(如 SQL Server LocalDB 或 Azure SQL Database),使用 Entity Framework 可以让你用 C# 代码轻松操作数据库。
- ASP.NET MVC:Web Forms 很适合快速开发,但 ASP.NET MVC 是一个更现代、更灵活的框架,它提供了更好的控制分离、测试性和对 RESTful API 的支持,这是目前的主流方向。
- ASP.NET Core:这是微软最新的跨平台框架,它结合了 MVC 和 Web Forms 的优点,并提供了更高的性能和更优化的开发体验,对于新项目,强烈推荐从 ASP.NET Core 开始。
- 部署:将你的网站部署到云服务器上,如 Azure、IIS 等,让其他人也能访问。
希望这份详细的教程能帮助你成功创建自己的 ASP.NET 个人网页!
