Member 14677197 Ответов: 1

Как мне решить приведенную ниже ошибку ?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class frmSalaryCalculator : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       

    }
    protected void btnCalculateSalary_Click(object sender, EventArgs e)
    {
        string strAnnualHours = txtAnnualHours.Text; 
        double AnnualHours = Convert.ToDouble(strAnnualHours); 


        string strPayRate = txtPayRate.Text;
        double PayRate = Convert.ToDouble(strPayRate);

        double AnnualSalary = AnnualHours * PayRate; 
        lblAnnualSalary.Text = "$" + btnCalculateSalary.ToString();
        
    }
}


Что я уже пробовал:

Я сделал все возможное, и сообщение об ошибке все еще здесь.

Source Error: 



Line 16:     {
Line 17:         string strAnnualHours = txtAnnualHours.Text; 
Line 18:         double AnnualHours = Convert.ToDouble(strAnnualHours); 
Line 19: 
Line 20: 
  

 Source File:  \\sce.academic.net\homedir$\D01293681\Documents\Visual Studio 2012\WebSites\WebSite1\frmSalaryCalculator.aspx.cs    Line:  18 

1 Ответов

Рейтинг:
4

OriginalGriff

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

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

Поэтому в принципе никогда не используйте методы преобразования при вводе данных пользователем - пользователи все время ошибаются, а приложения, которые из-за этого терпят крах, - это просто ошибки школьника. Всегда проверяйте и преобразуйте пользовательский ввод с помощью соответствующего метода TryParse или TryParseExact и сообщайте об ошибках пользователю вместо продолжения.

В C# это было бы так:

double annualHours;
if (!double.TryParse(txtAnnualHours.Text, out annualHours))
   {
   ... report an input error to the user ...
   return;
   }


Но... для веб-решений эти тесты должны выполняться на клиенте (то есть на Javascript, а не на серверном C#), и страница отправляется на сервер только тогда, когда все проверено и исправлено.