Я работаю над страницей веб-форм ASP.NET, которая запрашивает в базе данных список записей в таблице Study. Эти записи необходимо передать в раскрывающийся список. Когда исследование выбирается из раскрывающегося списка, 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?

0
SidC 14 Фев 2018 в 09:09

1 ответ

Лучший ответ

ddlStudies.SelectedValue не является допустимым целым числом 0, 1, 2 и т. Д.

Держу пари, это пустая строка. Convert.ToInt32(""), что вызовет возникшее у вас исключение.

Интересно, что Convert.ToInt32(null) вернет ноль.

Попробуйте Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue)

1
Jim 14 Фев 2018 в 09:20