ASP.NET Razor – C# 逻辑条件

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 年铁律(违反就重写!)

场景必须这么写禁止这么写
对象可能为 nulluser?.Property == trueuser.Property == true(会崩溃)
字符串判空string.IsNullOrEmpty(str)str == ""str == null
逻辑与/或加括号明确优先级 (a && b) || ca && 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 天背完,条件判断永不出错!

文章已创建 2863

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部