当下拉列表设置为默认值时如何修复 System.FormatException?

2024-03-09

我遇到“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; 
    }

在致电之前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);
}

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

我也建议使用适当的类型。如果 CarrierId 始终为 int 值或无值,您可以考虑使用可为 null 的 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当下拉列表设置为默认值时如何修复 System.FormatException? 的相关文章

随机推荐