0

このコードで asp.net mvc 4 の「入力文字列が正しい形式ではありませんでした」というエラーが表示されます)、ブランドがテーブルにあるドロップダウンリストは文字列値ですが、それらが関連している項目テーブルの行はint値です。検索結果の http 投稿は文字列値でそれを実行しようとしますが、クエリ パスを検索するブランドの int id を URL に手動で入力すると、エラーが発生します。これが私のコードの例で、私の悪い英語で申し訳ありません。

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 に答える