2012-02-23 41 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。