我想创建一个三层体系结构的Web应用程序。但发现一些问题,例如:
mscorlib.dll中发生了'System.FormatException'类型的异常 但未在用户代码中处理
我尝试了int.Parse()
方法,即使该方法不起作用。
如何在ASP.NET 3Layer Web应用程序中处理此问题?
protected void btnDetails_Click(object sender, EventArgs e)
{
int id = int.Parse(txtId.Text);
Product product = db.GetProducts().Single(x => x.productId == id);
txtNmae.Text = product.name;
txtPrice.Text = product.price.ToString();
}
答案 0 :(得分:1)
您应该使用int.TryPrase()
而不是int.Prase()
。
int.Parse()
将引发异常,而int.TryPrase()
将根据转换是否有效返回true/false
。
这引发异常。
string text = "abc";
int id = int.Parse(text);
但是
这将返回false
。
string text = "abc";
bool result = int.TryParse(text, out int value);
程序引发异常的原因是TextBox
中的文本不是整数值。如果int.Parse()
方法是有效的整数值,它将把字符串值转换为int。因此,如果TextBox
包含某些字符,例如a
,b
等,或者即使它是一个空字符串,那么Parse()
方法也无法将其转换为一个整数,因此抛出异常,抱怨您的输入字符串格式不正确。
int.TryParse()
方法更进一步。它尝试将值转换为整数,如果成功,则返回true
,并在out
参数中以int格式提供转换后的值。如果由于输入字符串格式错误等问题而导致转换失败,则不会引发异常。相反,它将返回false
,并且out参数将设置为zero
。这样的好处是,在输入格式错误的情况下,不必捕获异常。
正如Bradley所指出的,如果您使用int.TryParse()
,则应始终检查返回值。如果是true
,则说明转换成功。如果是false
,则说明出了点问题。因此,如果是false
,在继续执行程序的下一步之前,您应该对输入字符串不是有效整数进行一些处理。