输入字符串的格式不正确

时间:2013-02-26 17:01:25

标签: c# asp.net string asp.net-mvc-4 int

我在这段代码中出现错误,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 //传递

  

4 个答案:

答案 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方法:

文档: http://msdn.microsoft.com/en-us/library/f02979c7.aspx

答案 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));