2015-07-09 2 views
-1

Я получаю следующую ошибку, когда я назначаю целочисленное значение из текстового поля в переменную.преобразование значения текстового поля в int

GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);   
int quantity = Convert.ToInt32(((TextBox)row.FindControl("txtQuantity")).Text);    
ShoppingCart.Instance.SetItemQuantity(productId, quantity); 

Я получаю сообщение об ошибке во второй строке кода ниже:

GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);   
int quantity = Convert.ToInt32(((TextBox)row.FindControl("txtQuantity")).Text);    
ShoppingCart.Instance.SetItemQuantity(productId, quantity); 

Исключение составляет

System.FormatException: Input string was not in a correct format. 
+3

Что '((TextBox) row.FindControl (" txtQuantity ")). Text' точно возвращает? Не могли бы вы отладить свой код и рассказать нам? Какова ваша «CurrentCulture»? –

+1

Какой текст вы пытались разобрать? – Marwie

+2

Какова ценность 'txtQuantity.Text'? Где вы назначаете значение? –

ответ

2

Метод Convert.ToInt32 сгенерирует исключение, если строка аргумент не является число.

Например, при инициализации вашей формы значение элемента управления, безусловно, является string.empty, поэтому вызов будет выбрасываться.

Попытка проверить значение перед преобразованием его:

GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer); 
int quantity; 
string sQuantity = ((TextBox)row.FindControl("txtQuantity")).Text; 
if(int.TryParse(sQuantity, out quantity)) 
{ 
    ShoppingCart.Instance.SetItemQuantity(productId, quantity); 
} 
else 
{ 
    // do whatever you want if the textbox doesnt contains an int 
    // for example: 
    ShoppingCart.Instance.SetItemQuantity(productId, 0); 
} 
0

Вместо непосредственного преобразования в ряд с помощью Convert.ToInt32(), используйте int.TryParse() `.

int result=0; 

if(int.TryParse(((TextBox)row.FindControl("txtQuantity")).Text,out result)) 
{   
ShoppingCart.Instance.SetItemQuantity(productId, quantity); 

}