You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web Pages(Razor)表单查询验证:空引用错误解决求助

解决查询无结果时的Null引用错误问题

我明白你的困扰——当输入不存在的Commission Name时,因为查询返回的结果没有有效数据,直接渲染WebGrid就会触发null引用错误。下面是具体的修复方案,帮你添加验证逻辑并处理边界情况:

核心修改点

  1. 给聚合查询的COUNT结果添加别名,方便后续判断是否有匹配记录
  2. 在渲染表格前检查是否存在有效数据
  3. 处理SUM结果可能为null的情况,避免格式化时出错

修改后的完整代码

@helper drawSummaryTable(String option, String tableType) {
    var db = Database.Open("CommissionsDB");
    var ComName = "%" + Request["ComName"] + "%";
    // 修改查询,给COUNT列添加别名CommissionCount
    var query = @"SELECT COUNT(Commission_Name) as CommissionCount, 
                       SUM(Consumption) as Consumption, 
                       SUM(Obligo) as Obligo, 
                       SUM(ActualCosts) as ActualCosts, 
                       SUM(Summary) as Summary 
                  FROM SiempelBizRepTabNew 
                  WHERE Commission_Name LIKE @0";
    var data = db.Query(query, ComName);
    // 获取查询结果的第一条记录(聚合查询始终返回至少一行)
    var result = data.FirstOrDefault();
    
    <h1>BestellObligo</h1>
    <form method="post">
        <div id="gridContainer">
            <div id="grid" style="width: 100%; height: 150px;">
                Commission name: <input type="text" name="ComName" value="@Request["ComName"]" placeholder="Type here Commission name" />
                <input type="submit" value="Show" />
                
                @if (!string.IsNullOrEmpty(Request["ComName"]))
                {
                    <p>Calculated values displayed for: <strong>@Request.Form["ComName"]</strong></p>
                    
                    // 判断是否有匹配的记录(CommissionCount > 0)
                    if (result != null && result.CommissionCount > 0)
                    {
                        var grid = new WebGrid(data, ajaxUpdateContainerId: "grid", canPage: false, canSort: false);
                        @grid.GetHtml(
                            tableStyle: "table",
                            alternatingRowStyle: "alternate",
                            headerStyle: "header",
                            columns: grid.Columns(
                                // 使用null合并运算符处理SUM可能为null的情况
                                grid.Column("Consumption", "Consumption{Ist Kosten Material}", format: @<text>@(item.Consumption?.ToString("#,0") ?? "0") €</text>),
                                grid.Column("Obligo", "Obligo+ImHaus", format:@<text>@(item.Obligo?.ToString("#,0") ?? "0") €</text>),
                                grid.Column("ActualCosts", "ActualCosts{Ist Fertigung}", format:@<text>@(item.ActualCosts?.ToString("#,0") ?? "0") €</text>),
                                grid.Column("Summary", "Summary{Gesamt}", format:@<text>@(item.Summary?.ToString("#,0") ?? "0") €</text>))
                        )
                    }
                    else
                    {
                        // 无匹配记录时显示提示信息
                        <p style="color: red;">*Commission Name or keyword does not exist.</p>
                    }
                }
            </div>
        </div>
    </form>
}

关键说明

  • 聚合查询的特性:即使没有匹配的行,SELECT COUNT(...)也会返回一行结果,其中CommissionCount为0,SUM类字段为null。我们通过判断CommissionCount > 0来确认是否存在有效数据。
  • Null安全处理:使用?.和??运算符(null合并运算符)处理SUM结果可能为null的情况,避免格式化时触发错误。
  • 用户体验优化:只有当用户输入了查询内容后,才显示查询提示和结果/错误信息,让界面更简洁。

这样修改后,无论是输入不存在的Commission Name还是拼写错误,都会友好地显示提示,而不会抛出异常啦!

内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:54:57