ASP.NET Web Pages(Razor)表单查询验证:空引用错误解决求助
解决查询无结果时的Null引用错误问题
我明白你的困扰——当输入不存在的Commission Name时,因为查询返回的结果没有有效数据,直接渲染WebGrid就会触发null引用错误。下面是具体的修复方案,帮你添加验证逻辑并处理边界情况:
核心修改点
- 给聚合查询的COUNT结果添加别名,方便后续判断是否有匹配记录
- 在渲染表格前检查是否存在有效数据
- 处理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
相关产品推荐
相关产品推荐

