2012-02-23 37 views
0

输入字符串格式不正确。在这一行:int.parse上的错误

int total = 0; 
total = int.Parse(TextBox2.Text) + int.Parse(TextBox4.Text) + int.Parse(TextBox6.Text) + 
     int.Parse(TextBox8.Text) + int.Parse(TextBox10.Text) + int.Parse(TextBox12.Text) + 
     int.Parse(TextBox14.Text) + int.Parse(TextBox16.Text); 
Label1.Text = total.ToString(); 

我想将值传递给另一页。 这是什么意思? T_T 感谢提前:)

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Session["Month"] = DropDownList2.SelectedValue; 
    Session["expen1"] = TextBox1.Text; 
    Session["expen2"] = TextBox3.Text; 
    Session["expen3"] = TextBox5.Text; 
    Session["expen4"] = TextBox7.Text; 
    Session["expen5"] = TextBox9.Text; 
    Session["expen6"] = TextBox11.Text; 
    Session["expen7"] = TextBox13.Text; 
    Session["expen8"] = TextBox15.Text; 

    int totalvalue = 0; 
    totalvalue = int.Parse(TextBox2.Text) + int.Parse(TextBox4.Text) + int.Parse(TextBox6.Text) + int.Parse(TextBox8.Text) + int.Parse(TextBox10.Text) + int.Parse(TextBox12.Text) + int.Parse(TextBox14.Text) + int.Parse(TextBox16.Text); 
    Label1.Text = totalvalue.ToString(); 

    Session["price1"] = TextBox2.Text; 
    Session["price2"] = TextBox4.Text; 
    Session["price3"] = TextBox6.Text; 
    Session["price4"] = TextBox8.Text; 
    Session["price5"] = TextBox10.Text; 
    Session["price6"] = TextBox12.Text; 
    Session["price7"] = TextBox14.Text; 
    Session["price8"] = TextBox16.Text; 
    Session["total"] = Label1.Text; 

    Server.Transfer("sum.aspx"); 


} 

我想结果存储在sum.aspx。

+0

这意味着其中一个文本框的值不是可以被解析为“int”的数字。尝试检查每个“TextBox.Text”值是什么,你会发现罪魁祸首。 – 2012-02-23 09:08:42

+2

而不是使用文本框并解析您信任的数字为文本的文本,在使用某种输入掩码或验证之前解析。或者,使用不同的控件,如数字上/下或数字微调器。 – Dave 2012-02-23 09:11:03

回答

2

如果您的任何TextBox值是null或者不是数字,则会中断。为了达到此目的,所有TextBox值都需要有一个默认值0,您将不得不将TextBox的输入限制为数字。

+0

如何设置值0? – 2012-02-23 09:16:37

+0

看看你的代码,你可以使用'三元运算符' - 'Session [“expensive1”] = String.IsNullOrEmpty(TextBox1.Text)? “0”:TextBox1.Text;' – 2012-02-23 09:21:00

+0

谢谢尼尔。你这样的救星 – 2012-02-23 09:26:44

0

如果任何文本框为空,您将收到一个异常,因为无法分析空白文本。 改为使用int.TryParse

+0

我明白了。这意味着,所有的文本框应该有价值?但如果用户只在某些文本框中输入值,该怎么办?这8个文本框不是强制输入的。请帮我吗? – 2012-02-23 09:12:52

0

这是什么意思?

其中一个文本框包含无法解析为整数的文本。

0

检查每个文本框的数据应该是数字。如果尝试输入字符串并用int.parse验证,将会出现此错误。

0

这意味着其中一个文本框的值(TextBox#.Text)包含一个不能“转换”为整数的值。

文本框内有什么值?例如,如果文本框包含非数字字符,它将无法转换,因为字母'a'没有数字值。

0

这意味着对int.Parse的调用之一会抛出异常,因为文本值不是可以解析为整数的值(例如文本是非数值)。

一个更好的办法来做到这一点是:

var textBoxesToParse = new [] { TextBox2, TextBox4, TextBox6, TextBox8, TextBox10, TextBox12, TextBox14, TextBox16 }; 

int total = 0; 

foreach (var textBox in textBoxesToParse) 
{ 
    int textBoxValue; 

    if(int.TryParse(textBox.Text, out textBoxValue)) 
    { 
     total += textBoxValue; 
    } 
    else 
    { 
     // The textbox had an invalid value, up to you what you need to do here. 
    } 
} 
+0

嗨特雷弗。 u代码给出的总值为0。 – 2012-02-23 09:41:58

0

而不是使用文本框和解析你信任的是数字文本,使用某种类型的输入掩码或验证之前解析。或者,使用不同的控件,如数字上/下或数字微调器。

你需要了解如何处理异常,当使用try解析以及何时使用解析...

0

正如已经提到的,错误是你的文本框的一个设有一张空白或非数字值。

您可以使用RegularExpressionValidator,以便用户只有在值为数字时才允许提交表单。

<asp:RegularExpressionValidator ID="RegularExpressionValidator7" runat="server"  
ControlToValidate="txtLastName"Display="Dynamic" ErrorMessage="Numeric characters only" 
ForeColor="Red" ValidationExpression="^[0-9]*$" 

此外,你也应该看看使用tryParseInt32.Parse();如果传递一个空字符串,后者返回0。