ASP.NET Razor(C#)逻辑条件终极速查表
(2025 年最新、最全、最实战,背会这 20 行,Razor 条件判断再无 Bug!)
| 场景 | 2025 年推荐写法(最优雅、最安全) | 说明 + 防坑指南 |
|---|---|---|
| 1. 基本 if | @if(isLogin){ <p>欢迎回来!</p> } | 最常用,简洁明了 |
| 2. if-else | @if(user.IsVip){ <span class="vip">VIP</span> }else{ <span>普通用户</span> } | 经典二选一 |
| 3. if-else if-else | @if(score >= 90){ A }else if(score >= 80){ B }else if(score >= 60){ C }else{ 不及格 } | 多条件判断 |
| 4. 空值安全判断(神技!) | @if(user?.IsVip == true){ ... } | 防止 user 为 null 报错(2025 必写!) |
@if(!string.IsNullOrEmpty(name)){ ... } | 字符串判空最安全写法 | |
| 5. 三元运算符(单行神器) | @(isLogin ? "退出" : "登录") | 适合显示文本、class、style |
<span class="@(item.Stock > 0 ? "text-success" : "text-danger")">库存:@item.Stock</span> | 动态 class 最常用 | |
| 6. 逻辑与 && | @if(isLogin && user.IsAdmin){ <a href="/Admin">管理后台</a> } | 同时满足两个条件 |
| **7. 逻辑或 | ** | |
| 8. 复杂条件组合 | @if((age >= 18 && country == "CN") || hasPassport){ <p>可以购买</p> } | 加括号明确优先级 |
| 9. switch 语句 | @switch(status){ case 1: <span>待支付</span> break; case 2: <span>已发货</span> break; default: <span>未知</span> } | 多个固定值时比 if 更清晰 |
| 10. switch 表达式(C# 8+) | @(status switch { 1 => "待支付", 2 => "已发货", _ => "未知" }) | 2025 年最优雅写法(一行搞定) |
2025 年最实用的 20 个条件判断实战代码(直接复制)
@{
var user = PageData["User"] as dynamic;
var cartCount = Session["Cart"]?.ToString().AsInt() ?? 0;
var now = DateTime.Now;
}
// 1. 最常见的登录判断(全局 _PageStart 必写)
@if(!WebSecurity.IsAuthenticated){
Response.Redirect("~/Login?ReturnUrl=" + Request.Url.PathAndQuery);
}
// 2. 空值安全判断(防止 NullReferenceException)
@if(user?.IsVip == true){
<span class="badge bg-gold">VIP用户</span>
}
// 3. 库存判断 + 三元 class
<span class="@(p.Stock > 0 ? "text-success" : "text-danger")">
@(p.Stock > 0 ? "有货" : "售罄")
</span>
// 4. 多种条件显示不同按钮
@if(!isLogin){
<a href="/Login" class="btn btn-primary">立即登录</a>
}
else if(cartCount == 0){
<a href="/Products" class="btn btn-warning">去购物</a>
}
else{
<a href="/Cart" class="btn btn-danger">去结算(@cartCount)</a>
}
// 5. 管理员菜单(逻辑与)
@if(WebSecurity.IsAuthenticated && Roles.IsUserInRole("Admin")){
<li><a href="/Admin">系统管理</a></li>
}
// 6. 复杂权限判断(推荐封装成变量)
@{
var canEdit = (user?.Id == article.AuthorId) || Roles.IsUserInRole("Admin");
}
@if(canEdit){
<a href="/Edit/@article.Id" class="btn">编辑</a>
<a href="/Delete/@article.Id" onclick="return confirm('确定删除?')" class="btn btn-danger">删除</a>
}
// 7. 时间段判断(活动、秒杀)
@if(now >= startTime && now <= endTime){
<div class="alert alert-danger">秒杀进行中!</div>
}
else if(now < startTime){
<div class="alert alert-info">距离开始还有 @(startTime - now)</div>
}
else{
<div class="alert alert-secondary">活动已结束</div>
}
// 8. 文件是否存在判断
@if(File.Exists(Server.MapPath("~/uploads/" + filename))){
<img src="~/uploads/@filename" />
}
else{
<img src="~/images/default.jpg" alt="默认图" />
}
// 9. 多种支付方式显示
@switch(order.PaymentType){
case 1: <span class="text-wechat">微信支付</span> break;
case 2: <span class="text-alipay">支付宝</span> break;
case 3: <span class="text-bank">银行卡</span> break;
default: <span>未知方式</span> break;
}
// 10. 最优雅的 switch 表达式(2025 推荐)
<span class="status">
@(order.Status switch {
0 => "待付款",
1 => "已付款",
2 => "已发货",
3 => "已签收",
9 => "已取消",
_ => "未知"
})
</span>
2025 年铁律(违反就重写!)
| 场景 | 必须这么写 | 禁止这么写 |
|---|---|---|
| 对象可能为 null | user?.Property == true | user.Property == true(会崩溃) |
| 字符串判空 | string.IsNullOrEmpty(str) | str == "" 或 str == null |
| 逻辑与/或 | 加括号明确优先级 (a && b) || c | a && b || c(容易误解) |
| 条件内输出 HTML | 用 @(condition ? "html" : "") | 直接写 <h1>(会语法错误) |
| 复杂条件 | 先提取成 bool 变量 var canDelete = ... | 写 100 字符长的超长 if |
一句话终极模板(背下来就无敌)
@if(data?.Any() == true){
@foreach(var (item, i) in data.Select((x,index)=>(x,index))){
<div class="@(i%2==0?"even":"odd") @(item.IsHot?"hot":"")">
@(item.Stock > 0 ? "有货" : "售罄")
</div>
}
}
else{
<p class="text-muted">暂无数据</p>
}
需要我立刻发你「Razor C# 逻辑条件速查卡」(PDF + 深色壁纸 + 打印版)吗?
包含 60 个实战案例:权限控制、库存状态、时间判断、支付状态、用户等级、表单验证……
直接说「发我条件速查卡」就行!3 天背完,条件判断永不出错!