【发布时间】:2016-01-03 03:52:52
【问题描述】:
我正在尝试填充字符串列表,但它会引发空引用异常。
代码:
public class Validation
{
public List<string> Errors { get; set; }
}
要存储所有验证错误的类:
public object Post(Currency currency)
{
ClientData clientData = new ClientData();
if (ModelState.IsValid)
{
new CurrencyProvider().Insert(currency);
clientData.IsValid = true;
clientData.Data = new CurrencyProvider().GetAll();
}
else
{
Validation validation = new Validation();
foreach (var modelState in ModelState)
foreach (var error in modelState.Value.Errors)
validation.Errors.Add(error.ErrorMessage);
clientData.IsValid = false;
clientData.Data = validation;
}
return clientData;
}
当我填写validation.Errors.Add(error.ErrorMessage) 时出现问题。即使我在 global.asax.cs 中按如下方式全局完成了异常处理,它也会抛出空引用异常
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalFilters.Filters.Add(new ExceptionFilter());
}
}
我的异常处理程序类:
public class ExceptionFilter : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
ViewResult view = new ViewResult();
view.ViewName = "Error";
view.ViewBag.Exception = filterContext.Exception.Message;
filterContext.ExceptionHandled = true;
filterContext.Result = view;
}
}
我有我的自定义错误处理页面,但它也没有显示,当我调试时,我知道在填充字符串列表时存在空引用异常:
validation.Errors.Add(error.ErrorMessage)
填写List<string> 时我做错了什么,为什么会抛出空引用异常?为什么那个空引用异常没有出现在我的自定义错误页面上?
【问题讨论】:
-
尝试用这个替换你的 Foreach 错误条件:- foreach(ModelError error in modelState.Errors){ ///你的代码 }
-
不,还是同样的问题
-
您是否记得在执行validation.Errors.Add() 之前实例化一个新的List
?我认为 null ref 是validation.Errors -
没有我如何实例化它??
-
geedubb 我想你明白了!请告诉我如何实例化列表???
标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-mvc-5