【问题标题】:Input string was not in a correct format, Drop down list Selected Value输入字符串的格式不正确,下拉列表选择值
【发布时间】:2012-04-05 11:51:39
【问题描述】:

我有一个带有按钮的下拉列表,当单击该按钮时,会调用一个单独的类来运行一个在表中插入一行的 SQL 存储过程。但是,当单击按钮时,出现 FormatException 错误。

    protected void btnAssignWork_Click(object sender, EventArgs e)
    {
            RequestBO requestBO = new RequestBO();
            int oppid = Convert.ToInt32(Request.QueryString["Opportunity"]);
            int EmpId = Convert.ToInt32(ddlRadWorkers.SelectedValue);
            requestBO.AssignOpportunity(EmpId, oppid);

    }



       private void FillRadWorkerDDL()
    {
        RequestBO requestBO = new RequestBO();
        DataSet dsRADWorkers = null;
            dsRADWorkers = requestBO.GetRadWorkers();
            ddlRadWorkers.DataSource = dsRADWorkers;
            ddlRadWorkers.DataTextField = "EmpName";
            ddlRadWorkers.DataValueField = "EmployeeID";
            ddlRadWorkers.DataBind();
            ddlRadWorkers.Items.Insert(0, "Select Employee");
    }

Fill Rad Worker 在页面加载时被调用,RequestBO.GetRadWorkers 返回 2 列,EmployeeID 和 EmpName。单击按钮时,应将 Employee ID 和 Opportunity ID 提供给存储过程,但 FormatException 会阻止此操作。

感谢任何指导

更新:抱歉,这是一个回发问题,值不正确,因为 ASP.NET 没有采用 DDL 的新值

【问题讨论】:

  • 你确定在这行int oppid = Convert.ToInt32(Request.QueryString["Opportunity"]);没有引发错误吗?
  • 您是否可以将 Request.QueryString["Opportunity"] 的内容打印到标签(如果它们在您的环境中工作,则使用断点)以确保它是一个可以转换成整数?
  • 你从哪里得到异常?在查询字符串行或另一行上?
  • 仔细检查您的查询字符串是否包含Opportunity 键,我觉得它可能是OpportunityId :)
  • 知道异常在哪里抛出真的很有帮助。请更新您的问题:-)

标签: c# asp.net .net drop-down-menu


【解决方案1】:

尝试查看/打印Request.QueryString["Opportunity"]ddlRadWorkers.SelectedValue 的值。你没有告诉它在哪一行抛出异常,如果它出现在Convert.ToInt32(ddlRadWorkers.SelectedValue);,那么可能你没有正确设置ddlRadWorkers的数据源。设置如下:

private void FillRadWorkerDDL()
{
    ...
    ddlRadWorkers.DataSource = dsRADWorkers.Tables[0];
    ...
}

【讨论】:

    【解决方案2】:

    您应该执行以下操作,而不是调用 Convert.ToInt32(string str):

       if (!string.IsNullOrEmpty(str))
       {
           Convert.ToInt32(str);
       }
    

    或者您可以使用 int.TryParse。此方法返回一个布尔值而不是抛出异常,并在输出参数中返回整数值。使用 TryParse 的好处是,您还可以防止代码抛出异常,以防字符串中包含数字以外的其他字符

    【讨论】:

      【解决方案3】:

      使用

      Convert.ToInt32(Request.QueryString["Opportunity"].ToString()) and 
      int EmpId = Convert.ToInt32(ddlRadWorkers.SelectedValue.ToString());
      

      【讨论】:

        【解决方案4】:

        是的问题可能是由于回发,我也遇到了同样的问题,并且因为类似的问题卡了好几个小时,但是一旦我将 ispostback 放入包含 FillRadWorkerDLL() 函数声明的页面加载功能中,问题就解决了。 尝试这样做。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                FillRadWorkerDLL();
            }
        }
        
        FillRadWorkerDDL(){ //your code here }
        

        建议: 1)尝试在FillRadWorkerDLL();那一行使用调试模式(ctrl + F10)并尝试解决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2013-08-22
          相关资源
          最近更新 更多