ASP.NET Web Pages(经典版)—— Razor 代码完整写法大全
(适用于老项目维护,2010–2016 年的 .cshtml 文件)
所有代码都可直接复制粘贴到你的 .cshtml 文件里(不需要控制器、不需要 PageModel)
1. 基本语法(必背 7 种)
| 用法 | 写法示例 | 说明 |
|---|---|---|
| 输出变量 | @DateTime.Now | 自动 HTML 编码 |
| 输出不编码(显示 HTML) | @Html.Raw("<strong>加粗</strong>") | 危险!只用于可信内容 |
| 代码块 | @{ var name = "张三"; } | 大括号内是纯 C# |
| 条件判断 | @if(userId > 0){ <p>已登录</p> } | 直接混在 HTML 里 |
| 循环 | @foreach(var p in products){ ... } | |
| 注释(C#) | @* 这是一段 Razor 注释 *@ | 不会发送到浏览器 |
| 切换回 HTML | @: 这行是纯文本 或 <text>纯文本</text> | 极少用 |
2. 常用内置对象(老项目里 90% 都靠这几个)
Request["id"] → GET 或 POST 参数
Request.QueryString["id"]
Request.Form["name"]
Response.Write("hello") → 直接输出
Response.Redirect("~/Login.cshtml")
IsPost → 是否是 POST 请求
IsAjax → 是否是 Ajax 请求(jQuery $.ajax 发出的)
Session["UserId"] = 5; → 存
var id = Session["UserId"] as int?;
UrlData[0] → URL 中的 /Products/123 的 123
3. 数据库操作(经典 Web Pages 写法)
@{
var db = Database.Open("MyDatabase"); // App_Data 里的 SQLite 或 SQL Server Compact
var sql = "SELECT * FROM Products WHERE Category=@0";
var list = db.Query(sql, "手机");
}
<table border="1">
@foreach(var row in list){
<tr>
<td>@row.Id</td>
<td>@row.Name</td>
<td>@row.Price</td>
<td>
<a href="Edit.cshtml?id=@row.Id">编辑</a> |
<a href="Delete.cshtml?id=@row.Id" onclick="return confirm('确定删除?');">删除</a>
</td>
</tr>
}
</table>
4. 表单提交 & 防注入(最常见完整示例)
@{
var message = "";
if(IsPost){
var name = Request["name"];
var price = Request["price"].AsDecimal();
if(name.IsEmpty()){
message = "名称不能为空!";
}else{
var db = Database.Open("Shop");
db.Execute("INSERT INTO Products (Name,Price) VALUES (@0,@1)", name, price);
Response.Redirect("~/Products/List.cshtml");
}
}
}
<h2>新增商品</h2>
<p style="color:red">@message</p>
<form method="post">
商品名称:<input type="text" name="name" value="@Request["name"]" /><br /><br />
价 格:<input type="text" name="price" value="@Request["price"]" /><br /><br />
<input type="submit" value="保存" />
</form>
5. 文件上传(超级常用)
@{
if(IsPost && Request.Files.Count > 0){
var file = Request.Files[0];
if(file.FileName.EndsWith(".jpg") || file.FileName.EndsWith(".png")){
var savePath = "~/uploads/" + Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath(savePath));
@:<p>上传成功:<img src="@savePath" width="200" /></p>
}
}
}
<form method="post" enctype="multipart/form-data">
选择图片:<input type="file" name="file1" /><br /><br />
<input type="submit" value="上传" />
</form>
6. 布局页(_Layout.cshtml)+ 公共页头页尾
<!-- _Layout.cshtml -->
<!DOCTYPE html>
<html>
<head>
<title>@Page.Title</title>
<link href="~/styles/site.css" rel="stylesheet" />
</head>
<body>
<header>我的网站 - @DateTime.Now.Year</header>
<nav>
<a href="~/Default.cshtml">首页</a> |
<a href="~/Products/List.cshtml">商品</a>
</nav>
<div id="main">
@RenderBody()
</div>
<footer>© 2025 老项目还在跑</footer>
</body>
</html>
在普通页面使用:
@{
Layout = "~/_Layout.cshtml";
Page.Title = "商品列表";
}
<h1>这里是内容区</h1>
7. 简单登录(WebSecurity,最经典的会员系统)
先安装包(NuGet):
Install-Package Microsoft.AspNet.WebPages.WebData
Install-Package Microsoft.AspNet.WebPages.Administration
初始化(只运行一次,放在 _AppStart.cshtml):
@{
WebSecurity.InitializeDatabaseConnection("MyDatabase", "Users", "Id", "UserName", true);
}
登录页面示例(Login.cshtml):
@{
if(IsPost){
if(WebSecurity.Login(Request["user"], Request["pwd"], true)){
Response.Redirect("~/Admin/");
}else{
@:<p style="color:red">用户名或密码错误</p>
}
}
}
<form method="post">
用户名:<input name="user" /><br />
密码:<input type="password" name="pwd" /><br />
<label><input type="checkbox" name="remember" />记住我</label><br />
<button>登录</button>
</form>
总结:老 ASP.NET Web Pages Razor 代码速查表
| 需求 | 一行代码搞定 |
|---|---|
| 取参数 | Request["id"] |
| 判断 POST | IsPost |
| 跳转页面 | Response.Redirect("~/List.cshtml") |
| 数据库查询 | db.Query("SELECT …", 参数) |
| 数据库增删改 | db.Execute("INSERT …", 参数) |
| 防注入 | 永远用 @0、@1 参数,不要拼接 SQL |
| 登录验证 | WebSecurity.Login(user,pwd) |
| 退出登录 | WebSecurity.Logout() |
| 当前用户名 | WebSecurity.CurrentUserName |
| 判断是否已登录 | WebSecurity.IsAuthenticated |
老项目维护就靠上面这些代码,99% 的功能都能搞定!
如果你现在要:
- 把某个具体功能用 Web Pages 写出来(比如分页、搜索、导出 Excel)
- 或者直接把整个老项目一键升级到 .NET 9 Razor Pages(推荐)
直接把需求甩过来,我 1 分钟给你完整可运行的 .cshtml 代码!