0

我在使用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&marcas=BSN //错误

url/articulos?search_query=a&marcas=1 //通过

4

4 回答 4

2

您正在尝试将字符串转换为整数。因此字符串必须采用正确的格式。例如,您不能将“abc1”转换为整数。您可以使用Int32.TryParse(stringVal)来检查类型转换和转换的可能性。上述方法返回布尔值。

于 2013-02-26T17:04:30.663 回答
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());
}
于 2013-02-26T17:12:03.800 回答
1

尝试 Int32.TryParse 方法尝试将字符串转换为整数。所有主要数字格式都有 TryParse 方法:

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

于 2013-02-26T17:10:16.393 回答
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));
于 2013-02-26T17:11:14.113 回答