ASP.NET MVC布局页中如何检查路由参数是否存在
解决布局页中检查RouteData参数时的空引用问题
我来帮你搞定这个空引用的问题~你遇到的错误根源很明确:当URL里没有text参数时,ViewContext.RouteData.Values["text"]本身就是null,这时候直接调用.ToString()肯定会触发异常。下面给你两种安全的解决方案:
方案一:先验证参数存在性再转换
先判断text是否存在于RouteData的Values集合中,并且值不为null,再执行ToString()转换,避免空引用:
@{ var Newid = ViewContext.RouteData.Values["id"]; string Newtext = null; // 先确认参数存在且非空 if (ViewContext.RouteData.Values.ContainsKey("text") && ViewContext.RouteData.Values["text"] != null) { Newtext = ViewContext.RouteData.Values["text"].ToString(); } // 之后就能安全执行判断逻辑了 if (Newtext == "t") { // 这里写你的业务代码 } }
方案二:用null条件运算符简化写法
如果你的项目用的是C# 6.0及以上版本,可以用?.运算符来简化判断——当左侧值为null时,整个表达式直接返回null,不会触发异常:
@{ var Newid = ViewContext.RouteData.Values["id"]; // 用?.ToString()避免空引用 var Newtext = ViewContext.RouteData.Values["text"]?.ToString(); // 安全执行判断 if (Newtext == "t") { // 这里写你的业务代码 } }
为什么原来的代码会报错?
你之前写的@if(ViewContext.RouteData.Values["text"].ToString()!=null)之所以抛错,是因为当text参数不存在时,ViewContext.RouteData.Values["text"]是null,调用.ToString()的瞬间就会抛出NullReferenceException,根本到不了判断是否等于null的步骤。所以必须先确保要转换的对象不为null,再执行字符串转换操作。
内容的提问来源于stack exchange,提问作者atc
相关产品推荐
相关产品推荐

