C# 错误:";输入字符串的格式不正确";论虚假陈述

C# 错误:";输入字符串的格式不正确";论虚假陈述,c#,asp.net,tryparse,C#,Asp.net,Tryparse,如果语句(numtickets>tickav)为true(如果可用票证大于订购的票证),则我的代码工作正常,但如果从其他角度看,它会在int numTick=Convert.ToInt32(txtNumberOfTickets.Text)上抛出此错误“FormatException未由用户代码处理,输入字符串格式不正确”; 我知道我可以用tryparse,我需要帮助把它写进代码中。 任何帮助都将不胜感激,谢谢 namespace TicketsApp { public partial cl

如果语句(numtickets>tickav)为true(如果可用票证大于订购的票证),则我的代码工作正常,但如果从其他角度看,它会在int numTick=Convert.ToInt32(txtNumberOfTickets.Text)上抛出此错误“FormatException未由用户代码处理,输入字符串格式不正确”; 我知道我可以用tryparse,我需要帮助把它写进代码中。 任何帮助都将不胜感激,谢谢

 namespace TicketsApp
 {
 public partial class TicketOrder : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["description"] != null && Session["EventID"] != null &&                             Session["numtickets"] != null && Session["ticketcost"] != null
            && Session["State"] != null && Session["Section"] != null && Session["Row"] != null && Session["date"] != null)
        {
            if (!IsPostBack)
            {
                try
                {
                    txtEventDescription.Text = Session["description"].ToString();
                    txtEventID.Text = Session["EventID"].ToString();
                    txtTicketsAvailable.Text = Session["numtickets"].ToString();
                    txtTicketCost.Text = Session["ticketcost"].ToString();
                    txtState.Text = Session["State"].ToString();
                    txtSectionNumber.Text = Session["Section"].ToString();
                    txtRowNumber.Text = Session["Row"].ToString();

                    txtNumberOfTickets.Focus();
                    lblOutput.Visible = false;

                }
                catch
                {
                    lblError.Text = "Please Search for Tickets First!";
                    lblError.Visible = true;
                    btnOrderTickets.Visible = false;
                    Response.Redirect("TicketSearch.aspx");
                    return;
                }
            }
        }
    }


    protected void btnOrderTickets_Click(object sender, EventArgs e)
    {

        TicketsDataAccessDataContext NewOrder = new TicketsDataAccessDataContext();

        int numTick = Convert.ToInt32(txtNumberOfTickets.Text);
        string s = txtTotalCost.Text.Substring(1);
        int totc = Convert.ToInt32(s);
        int id = Convert.ToInt32(txtEventID.Text);
        DateTime dt = Convert.ToDateTime(Session["date"]);

        int returnedValue = NewOrder.PlaceOrderFull(id, txtEventDescription.Text, dt, Session["State"].ToString(), Session["section"].ToString(), Session["Row"].ToString(), numTick, totc, "vfateev");
        if (returnedValue != 0)
        {
            lblOutput.Text = "Error has occured. Please try again";
            lblOutput.Visible = true;
            btnOrderTickets.Visible = false;
        }
        else
        {
            lblOutput.Visible = true;
            lblOutput.Text = "Thank you";
            btnOrderTickets.Visible = false;
        }

    }

    protected void txtNumberOfTickets_TextChanged1(object sender, EventArgs e)
    {
        int cos = Convert.ToInt32(txtTicketCost.Text);
        int numtickets = Convert.ToInt32(txtNumberOfTickets.Text);
        int tickav = Convert.ToInt32(txtTicketsAvailable.Text);

        if (numtickets > tickav)
        {
            lblError.Text = "Please Enter a valid ticket quantity";
            lblError.Visible = true;

            lblOutput.Text = "";
            txtNumberOfTickets.Text = "";
        }


        else
        {

            int cost = cos * numtickets + 5;
            txtTotalCost.Text = "$" + cost.ToString();
            lblOutput.Visible = false;
            lblFee.Text = "There is a $5 shipping fee";
            lblFee.Visible = true;
            lblError.Text = "";}
    }
}

}

您可以使用int.TryParse,它返回一个布尔值,并且不会引发异常

int numTick = 0;
bool result = int.TryParse(txtNumberOfTickets.Text, out numTick );
您还可以执行一些客户端验证,以确保该字段已填写并包含一个数字。

只需使用 要在C#中使用IsNumeric,请添加对Microsoft.VisualBasic.dll的引用,然后

if (Information.IsNumeric(value))
   {
    DoSomthing();
   }
   else
   {
    DoSomethingElse();
   }
更新 打开VISUAL STUDIO==>您的项目

单击解决方案并添加引用,选择Microsoft.VisualBasic.dll confrim。新引用将添加到项目的引用中

在页面顶部声明Microsoft.VisualBasic.dll别名的导入状态

using Microsoft.VisualBasic.dll;
然后,您需要检查文本框的值

 if (Information.IsNumeric(yourtextbox.text.trim()))
   {
    //case true alias your value is numeric 
        //do what you need here like assing value to a var or any
        //else
   }
   else
   {
         //put your logic here in case result is false and value 
         //is not numeric
   }

下面是使用Int32.TryParse重写的方法之一。我假设您正在使用txtTotalCost.Substring(1)删除货币符号。可能有一些安全的方法可以做到这一点,在这个例子中,我只想删掉“$”

protected void btnOrderTickets_Click(object sender, EventArgs e)
{
    int numberOfTickets, ticketCost, eventId;
    if(Int32.TryParse(txtNumberOfTickets.Text, out numberOfTickets) &&
        Int32.TryParse(txtTotalCost.Text.TrimStart('$'), out ticketCost) &&
        Int32.TryParse(txtEventID.Text, out eventId))
    {
        DateTime dt = Convert.ToDateTime(Session["date"]);

        TicketsDataAccessDataContext NewOrder = new TicketsDataAccessDataContext();
        int returnedValue = NewOrder.PlaceOrderFull(eventId, txtEventDescription.Text, dt, Session["State"].ToString(), Session["section"].ToString(), Session["Row"].ToString(), numberOfTickets, ticketCost, "vfateev");
        if (returnedValue != 0)
        {
            lblOutput.Text = "Error has occured. Please try again";
            lblOutput.Visible = true;
            btnOrderTickets.Visible = false;
        }
        else
        {
            lblOutput.Visible = true;
            lblOutput.Text = "Thank you";
            btnOrderTickets.Visible = false;
        }
    }
    else
    {
        lblOutput.Visible = true;
        lblOutput.Text = "Some validation error message here...";
    }
}

您需要对
txtNumberOfTickets\u TextChanged1进行类似的修改,以确保用户输入的文本有效。

您在文本框中输入的数字是多少?@DanielA.White我的文本框将从sql表自动填充。如果我在我的txtnumberoftickets(numtickets)中输入的数字大于TxtTicketAvailable(tickav),则if会抛出错误,但如果numtickets