ASP.NET Core 7 Razor视图条件判断失效及页面空白问题求助
问题解决:ViewData条件判断失效及页面空白问题
问题分析
- 条件判断不生效:ViewData存储的是
object类型,直接和字符串"rank"做==比较时,是引用比较而非值比较,即便内容是"rank",也会判定为不相等。 - 转
ToString()后页面空白:此时条件判断生效,但Model.Tables[0]可能不存在(比如DataSet里没有数据表),遍历Model.Tables[0].Rows时触发空引用异常,导致整个视图渲染失败,页面空白。
解决方案
- 对ViewData的值做安全的类型转换,同时做空值校验
- 先检查DataSet中的数据表是否存在、是否有数据,再进行遍历
修改后的视图代码
@using System.Data @model DataSet hello, world <br /> @ViewData["searchtype"] @if (!string.IsNullOrEmpty(ViewData["searchtype"]?.ToString()) && ViewData["searchtype"].ToString() == "rank") { <h2>Ranks</h2> @if (Model?.Tables.Count > 0 && Model.Tables[0].Rows.Count > 0) { <ol> @foreach (DataRow dr in Model.Tables[0].Rows) { <li>@dr["name"].ToString()</li> } </ol> } }
关键说明
- 使用
ViewData["searchtype"]?.ToString()做安全转换,避免空值调用ToString()引发异常 - 增加
Model?.Tables.Count > 0判断,确保数据表存在后再访问Tables[0] - 增加
Tables[0].Rows.Count > 0判断,只有当有数据时才渲染列表,空表时只显示标题Ranks
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

