我在这段代码中出现错误,asp.net mvc 4“输入字符串格式不正确”我知道为什么我会收到此错误,因为我正在通过Marca制作搜索过滤器(品牌,我正在制作在西班牙语中,品牌在表中的下拉列表是字符串值,但是项目表中与它们相关的行是一个int值。搜索结果http post尝试用字符串值来做,我得到错误,如果我在url中手动输入我要搜索查询传递的品牌的int id。这是我的代码的一个例子,抱歉我的英文不好。
public ActionResult Index(string marcas, string search_query)
{
var MarcaLst = new List<string>();
var MarcaQry = from d in db.Marcas // table Brand
orderby d.Marca1 // string row of the table Brand
select d.Marca1;
MarcaLst.AddRange(MarcaQry.Distinct());
ViewBag.marcas = new SelectList(MarcaLst);
var marca = from m in db.Marcas
select m;
if (!String.IsNullOrEmpty(search_query))
{
descripcion = descripcion.Where(s => s.Descripcion.ToUpper().Contains(search_query.ToUpper()));
}
if (string.IsNullOrEmpty(marcas))
return View(descripcion.ToList());
else
{
int marcasint = Convert.ToInt32(marcas); // I get the error here from a work around to make the page load
return View(descripcion.Where(x => x.MarcaID == marcasint)); //MarcaID is the int value of the Items table for the Brand
}
}
url / articulos?search_query = a&amp; marcas = BSN //错误
url / articulos?search_query = a&amp; marcas = 1 //传递
答案 0 :(得分:2)
您正在尝试将字符串转换为整数。因此字符串必须采用正确的格式。例如,您不能将“abc1”转换为整数。您可以使用Int32.TryParse(stringVal)
检查类型转换和转换的可能性。上面的方法返回boolean。
答案 1 :(得分:2)
不要只是将一个字符串转换为Convert,并假设它是一个有效的整数,如果它不是null或为空。请改用TryParse:
int marcasint;
bool success = Int32.TryParse(marcas, out marcasint);
if (success){
return View(descripcion.Where(x => x.MarcaID == marcasint));
} else {
return View(descripcion.ToList());
}
答案 2 :(得分:1)
尝试使用Int32.TryParse方法尝试将字符串转换为整数。所有主要数字格式都有TryParse方法:
答案 3 :(得分:0)
尝试使用TryParse
方法
int marcasint;
if(Int32.TryParse(marcas, out marcasint))
{
return View(descripcion.Where(x => x.MarcaID == marcasint));
}
else
{
//change eles part as required.
return View(descripcion.Where(x => x.MarcaID == -1));
}
在阅读您的评论后,我认为您不需要按MarcaID
过滤记录,而是名称。因此,请尝试使用正确的字段名称替换BrandName
。
return View(descripcion.Where(x => x.BrandName == marcas));