проверка значений полей на ноль - PullRequest
3 голосов
/ 09 августа 2010

Я работал над этим некоторое время, и мне не хватает очевидного.Я пытаюсь убедиться, что если значение текстового поля оставлено пустым, ошибка не выдается, а вместо этого в текстовом поле отображается простое сообщение.Однако то, что у меня есть, и некоторые другие методы, которые я пробовал подобным образом, не сработало.Я не могу понять, почему это не работает и что мне нужно сделать по-другому.

Основы:

Это простой калькулятор, который позволяет ввестиизмерения их талии, шеи и роста для использования в формуле, которая рассчитывает их предполагаемый процент жира в организме.Расчет работает правильно, если поле не оставлено пустым.

Спасибо за любую помощь!

Мой код:

        if (TBWaist.Text == null || TBNeck.Text == null || TBHeight.Text == null)
        {
            TBBodyFat.Text = "Value missing";
        }
        else
            if (TBWaist.Text != null & TBNeck.Text != null & TBHeight.Text != null)
            {
                double waist;
                double neck;
                double height;

                waist = Convert.ToDouble(TBWaist.Text);
                neck = Convert.ToDouble(TBNeck.Text);
                height = Convert.ToDouble(TBHeight.Text);

                TBBodyFat.Text = Convert.ToString(String.Format("{0:p2}", ((501.5 / (1.0324 - .19077 * (Math.Log10(waist - neck)) + .15456 * (Math.Log10(height))) - 450) / 100)));

ОшибкаСообщение

Это сообщение об ошибке появляется, если я оставляю текстовое поле пустым.Я получаю ту же ошибку, если оставляю все остальные поля также пустыми.

В строке 45 введен неверный формат строки 45.

waist = Convert.ToDouble(TBWaist.Text);

Ответы [ 5 ]

5 голосов
/ 09 августа 2010

Я бы рекомендовал использовать методы TryParse.Таким образом, пустая строка, пустая строка или что-то, что не конвертируется в строку, обрабатываются одинаково.Во-вторых, я бы порекомендовал добавить RequiredFieldValidators и / или RegularExpressionValidators в каждое из текстовых полей, чтобы убедиться, что пользователь вводит значение, а это значение числовое.Таким образом, проверка в вашей процедуре события действует как последняя проверка канавы вместо того, чтобы требовать PostBack для проверки

protected void Button1_Click(object sender, EventArgs e)
{
    //Navy Men's Body Fat Formula:  %Fat=495/(1.0324-.19077(log(abdomen-neck))+.15456(log(height)))-450 
    //string outputString = String.Format("At loop position {0}.\n", i);

    double waist;
    double neck;
    double height;

    if ( !double.TryParse( TBWaist.Text, out waist )
        || !double.TryParse( TBNeck.Text, out neck )
        || !double.TryParse( TBHeight.Text, out height ) )
    {
        ErrorMessageLabel.Text = "Please ensure that each value entered is numeric.";
        return;
    }   

    var bodyFat = (501.5 
        / (1.0324 - .19077 * (Math.Log10(waist - neck)) 
            + .15456 * (Math.Log10(height))
            ) - 450 ) / 100;

    TBBodyFat.Text = bodyFat.ToString("P2");
}
2 голосов
/ 09 августа 2010

Вы должны проверять не только нулевые значения, но и пустые

использовать String.IsNullOrEmpty (TBWaist.Text);

1 голос
/ 09 августа 2010

Как насчет использования RequiredFieldValidator ?

В качестве альтернативы, вы можете проверить, что значение является пустой строкой и / или пустым

if (
    String.IsNullOrEmpty(TBWaist.Text) ||
    String.IsNullOrEmpty(TBNeck.Text) ||
    String.IsNullOrEmpty(TBHeight.Text)
)
0 голосов
/ 09 августа 2010

Вместо этого вы должны использовать String.IsNullOrEmpty (). Ваши значения поля ввода не являются нулевыми, просто пустыми, поэтому преобразование завершается неудачей.

protected void Button1_Click(object sender, EventArgs e)
{
    //Navy Men's Body Fat Formula:  %Fat=495/(1.0324-.19077(log(abdomen-neck))+.15456(log(height)))-450 
    //string outputString = String.Format("At loop position {0}.\n", i);


    if (String.IsNullOrEmpty(TBWaist.Text) || String.IsNullOrEmpty(TBNeck.Text) || String.IsNullOrEmpty(TBHeight.Text))
    {
        TBBodyFat.Text = "Value missing";
    }
    else
    {
        double waist;
        double neck;
        double height;

        waist = Convert.ToDouble(TBWaist.Text);
        neck = Convert.ToDouble(TBNeck.Text);
        height = Convert.ToDouble(TBHeight.Text);

        TBBodyFat.Text = Convert.ToString(String.Format("{0:p2}", ((501.5 / (1.0324 - .19077 * (Math.Log10(waist - neck)) + .15456 * (Math.Log10(height))) - 450) / 100)));
    }

}
0 голосов
/ 09 августа 2010

Попробуйте сравнить как

if( String.IsNullOrEmpty( TBWaist.Text ) == true )
{
     // error case
}
else
{
     // do stuff
}
...