将 DropDownList SelectedValue 传递给 SQL 查询抛出输入字符串的格式不正确

Passing DropDownList SelectedValue to SQL Query throws Input String was not in a Correct Format

我正在开发一个 ASP.NET 网络表单页面,该页面在数据库中查询研究 table 中的条目列表。这些条目将被传递到下拉列表中。当从下拉列表中选择一项研究时,studyID 将被传递到 GetResponses 方法以从存储过程中检索相关数据。

我收到 Input String was not in a Correct Format,其中包含以下片段:

 private DataTable LoadStudies(int iStudyID )
{
    ddlStudies.Items.Clear();
    ddlStudies.SelectedValue = "0";

    DataTable dt = new DataTable();
    using (PROTOTYPING db = new PROTOTYPING(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString))
    {
        var query = (from d in db.Studies
            where d.StudyStatus == 0 //Closed...
            orderby d.StudyName
            select new
            {
                d.StudyName,
                d.StudyID,
            });
        if (query.Count() > 0)
        {
            foreach (var a in query)
            {
                ddlStudies.Items.Add(new ListItem(a.StudyID.ToString()));
            }
        }

        dt.Dispose();
        DataView dv = new DataView(dt);
        return dt;
    }
}

错误是在Page_Load上抛出的,目前是这样写的:

protected void Page_Load(object sender, EventArgs e)
{
    int iUserID = 0;

    if (Session["UserID"] == null)
    {
        Response.Redirect("Default.aspx");
    }
    iUserID = Convert.ToInt32(Session["UserID"]);
    int iRole = 0;
    iRole = Convert.ToInt32(Session["RoleID"]);

    if (!Page.IsPostBack)
    {

        LoadStudies(Convert.ToInt32(ddlStudies.SelectedValue));
        GetResponses(Convert.ToInt32(ddlStudies.SelectedValue));

        ddlStudies.DataSource = LoadStudies(Convert.ToInt32(ddlStudies.SelectedValue));
        ddlStudies.DataTextField = "StudyName";
        ddlStudies.DataValueField = "StudyID";
        ddlStudies.DataBind();
    }
}

如何解决将下拉列表的数据源分配给 LoadStudies 方法时抛出的错误?

ddlStudies.SelectedValue 不是有效的整数值 012

我敢打赌这是一个空字符串。 Convert.ToInt32(""),这将引发您遇到的异常。

有趣的是 Convert.ToInt32(null) 将 return 为零。

Try Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue)