2012-02-23 7 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», и вы найдете виновника. –

+2

вместо использования текстовых полей и синтаксического разбора текста, которому вы доверяете, чтобы быть числовым, используйте какую-либо маска ввода или проверку перед началом синтаксического анализа. В качестве альтернативы используйте другой элемент управления, например Numeric up/down или numeric spinner. – Dave

ответ

2

Если какие-либо из ваших TextBox значений являются null или нет, это сломается. Чтобы это работало, все значения TextBox должны иметь значение по умолчанию 0, и вам придется ограничить ввод TextBox цифрами.

+0

как установить значение 0? –

+0

Глядя на ваш код, вы можете использовать «тернарный оператор» - 'Session [" expen1 "] = String.IsNullOrEmpty (TextBox1.Text)? «0»: TextBox1.Text; ' –

+0

Спасибо, ты. Вы такой заставка –

0

Если какое-либо из текстовых полей пуст, вы получите исключение, так как пустой текст не может быть проанализирован. Используйте вместо этого int.TryParse.

+0

я вижу. это означает, что все текстовые поля должны иметь значение? но как, если пользователь вводит значение только в текстовом поле? 8 текстовых полей не обязательно вводятся. Пойди меня? –

0

Что это значит?

Один из ваших текстовых полей содержит текст, который не может быть проанализирован как целое.

0

Проверить Данные каждого текстового поля должны быть номерами. если попытаться ввести строку и проверить с помощью int.parse, вы получите эту ошибку.

0

Это означает, что одно из значений текстовых полей (TextBox # .Text) содержит значение, которое нельзя «преобразовать» в целое.

Какие значения находятся внутри текстовых полей? Например, если текстовое поле содержит нечисловой символ, он не сможет преобразовать, поскольку буква «a» не имеет числового значения.

0

Это означает, что один из вызовов int.Parse выбрал исключение, потому что текстовое значение не было значением, которое могло бы быть проанализировано в Integer (например, текст был не числовым).

Лучший способ сделать это было бы:

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

привет trevor. u code дают общее значение 0. –

0

Вместо того, чтобы использовать текстовые и синтаксического анализа текста, которому вы доверяете, чтобы быть числовыми, использовать какую-то маску ввода или проверки перед разбором. В качестве альтернативы используйте другой элемент управления, например Numeric up/down или numeric spinner.

Вы должны узнать о том, как обрабатывать исключения, когда использовать, попробуйте разобрать и когда использовать разобрать ...

0

Как уже упоминалось выше, ошибка в том, что один из ваших текстовых полей имеет либо пробел, или нечисловое значение.

Вы можете использовать RegularExpressionValidator, чтобы пользователь мог отправить форму только в том случае, если значения являются числовыми.

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

Кроме того, вы должны также рассмотреть использование tryParse или Int32.Parse(); последний возвращает 0, если ему передается пустая строка.

Смежные вопросы