考虑这个简单的控制器:
Porduct product = new Product(){ // Creating a product object; }; try { productManager.SaveProduct(product); return RedirectToAction("List"); } catch (Exception ex) { ViewBag.ErrorMessage = ex.Message; return View("Create",product); }
现在,在我的创建视图中,我想检查ViewBag对象,看看它是否有Error属性。如果它有error属性,我需要注入一些JavaScript到页面中,以显示错误消息给我的用户。
我创建了一个扩展方法来检查:
public static bool Has (this object obj,string propertyName) { Type type = obj.GetType(); return type.GetProperty(propertyName) != null; }
然后,在创建视图中,我写了这行代码:
@if (ViewBag.Has("Error")) { // Injecting JavaScript here }
但是,我得到这个错误:
Cannot perform runtime binding on a null reference
任何想法?
解决方法
你的代码不工作,因为ViewBag是一个
dyanmic object不是一个’真实’类型。
以下代码应该工作:
public static bool Has (this object obj,string propertyName) { var dynamic = obj as DynamicObject; if(dynamic == null) return false; return dynamic.GetDynamicMemberNames().Contains(propertyName); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。