输入字符串的格式不正确,请下拉列表“选定值”

本文关键字:选定值 下拉列表 字符串 格式 不正确 输入 | 更新日期: 2023-09-27 18:30:01

我有一个带有按钮的下拉列表,当单击按钮时,会为函数调用一个单独的类,以运行在表中插入行的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");
    }

页面加载时调用FillRadWorker,RequestBO.GetRadWorkers返回EmployeeID和EmpName两列。单击该按钮时,Employee ID和Opportunity ID应被提供给存储过程,但FormatException会停止此操作。

感谢任何指导

更新:这是一个返回后的问题,抱歉,由于ASP.NET没有接收DDL 的新值,所以值不正确。

输入字符串的格式不正确,请下拉列表“选定值”

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

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

与其调用Convert.ToInt32(字符串str),不如执行以下操作:

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

或者你可以使用int.TryParse。这个方法返回布尔值而不是抛出异常,并在输出参数中返回整数值。使用TryParse的好处是,如果字符串中有数字以外的其他字符

,您还可以防止代码引发异常

使用

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

Yes问题可能是由于postback引起的,我也遇到了同样的问题,并为类似的问题滞留了很多小时,但当我将ispostback放入包含FillRadWorkerDLL()函数声明的页面加载函数中时,问题就解决了。试着这样做。

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

建议:1) 尝试在FillRadWorkerDLL();线上使用调试模式(ctrl+F10)并尝试解决它。