C# 自定义ASP.NET CreateUserWizard中DropDownList存在问题

C# 自定义ASP.NET CreateUserWizard中DropDownList存在问题,c#,asp.net,.net-4.0,drop-down-menu,createuserwizard,C#,Asp.net,.net 4.0,Drop Down Menu,Createuserwizard,我正在web应用程序中使用自定义的ASP.NET CreateUserWizard 在这里,我使用了一个dropdownlist来填充用户注册时的国家/地区。在页面加载中按预期填充国家/地区 var query = GetNationality(); var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality"); national.DataS

我正在web应用程序中使用自定义的
ASP.NET CreateUserWizard

在这里,我使用了一个
dropdownlist
来填充用户注册时的国家/地区。在
页面加载中
按预期填充国家/地区

var query = GetNationality();
var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");
national.DataSource = query;
national.DataTextField = "CountryName";
national.DataValueField = "Id";
national.DataBind();

var item = new ListItem("Select Country", "");
national.Items.Insert(0, item);
但是当我试图从
OnCreatedUser
事件中的
dropdownlist
获取值时,它会生成一个错误消息

System.FormatException:输入字符串的格式不正确

我在中所做的是
OnCreatedUser

var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");

var nationality = Convert.ToInt32(national.SelectedValue); <<-(where the error is)
}

任何想法都将不胜感激。
谢谢

你能把填充
下拉列表
的代码放在
页面加载
方法下的
下吗!iPostback

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        var query = GetNationality();
        var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");
        national.DataSource = query;
        national.DataTextField = "CountryName";
        national.DataValueField = "Id";
        national.DataBind();

        var item = new ListItem("Select Country", "");
        national.Items.Insert(0, item);
    }
}

可能是回发时,DropDownList被重新绑定,因此您总是会得到第一个项目,并尝试将空字符串转换为int,从而给出错误消息。

在var行上设置断点。你对国家有什么价值?什么值是national.SelectedValue?是的,我已经这样做了,但它没有拾取值检查是否已为下拉列表启用viewstate或createuserwizard.viewstate未在下拉列表中启用,是否需要启用该值?调试应用程序并查看转换为int的内容,它是哪个DropDownList项目。对于所选的索引,它将拾取-1。我尝试使用var national=national.Text,并选择“”作为值。您可以发布更多代码(完成一个)吗?然后我们可以帮助确定问题所在。谢谢,我编辑了这个问题。你可以在那里找到完整的代码。谢谢
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        var query = GetNationality();
        var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");
        national.DataSource = query;
        national.DataTextField = "CountryName";
        national.DataValueField = "Id";
        national.DataBind();

        var item = new ListItem("Select Country", "");
        national.Items.Insert(0, item);
    }
}