当dropdownlist设置为default时,如何修复System.FormatException?

我有“mscorlib.dll中发生类型’System.FormatException’的exception,但未在用户代码中处理。” 附加信息:输入字符串格式不正确。 我有一个下拉列表#Carriers,当用户选择项目时没有发生错误,但是,当用户选择下拉列表返回默认值时,它会显示此错误。 我需要一种方法来编写一个if语句来检查空值。

[AcceptVerbs(HttpVerbs.Get)] public JsonResult LoadAccsByCarrierId(string carrierid) { var accsList = this.GetAccs(Convert.ToInt32(carrierid)); var accsData = accsList.Select(m => new SelectListItem() { Text = m.AccessoryName, Value = m.AccessoryID.ToString(), }); return Json(accsData, JsonRequestBehavior.AllowGet); } [AcceptVerbs(HttpVerbs.Get)] public JsonResult LoadPhonesByCarrierId(string carrierid, string emailaddress) { int id; var phonesData = new List(); if (Int32.TryParse(carrierid, out id)) { var phonesList = this.GetPhones(id, emailaddress); phonesData = phonesList.Select(m => new SelectListItem() { Text = m.Name, Value = m.PhoneID.ToString(), }).ToList(); return Json(phonesData, JsonRequestBehavior.AllowGet); } else return null; } 

在调用Convert.ToInt32方法之前,需要检查字符串参数的值,并确保它是一个可以安全地转换为int值的值。

Int32.TryParse方法会很方便

 public JsonResult LoadAccsByCarrierId(string carrierid) { int id; var accsData =new List(); if (Int32.TryParse(carrierid, out id)) { var accsList = this.GetAccs(id); accsData = accsList.Select(m => new SelectListItem() { Text = m.AccessoryName, Value = m.AccessoryID.ToString(), }).ToList(); } return Json(accsData, JsonRequestBehavior.AllowGet); } 

carrierId参数值不是有效的数字字符串值时,上面的代码当前返回SelectListItem的空列表。 更新代码以根据需要返回所有内容(无过滤)。

我还建议使用适当的类型 。 如果carrierId将始终是int值或没有值,您可以考虑使用可空int并避免对字符串调用TryParse方法。

 public ActionResult LoadAccByCarrierId(int? carrierId) { if(carrierId!=null) { // to do : use carriedId.Value to do the Filtering } else { return something else } // to do : Return something }