c# - mvc入门 - 如何将dropdownlist设置为默认时修复System.FormatException?



asp.net-mvc visual-studio-2015 (1)

我遇到“mscorlib.dll中发生类型'System.FormatException'的异常,但未在用户代码中处理。 附加信息:输入字符串格式不正确。 我有一个下拉列表#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<SelectListItem>();
        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; 
    }

https://ffff65535.com


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

Int32.TryParse方法将他方便

public JsonResult LoadAccsByCarrierId(string carrierid)
{
     int id;
     var accsData =new List<SelectListItem>();
     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
}




visual-studio-2015