自定义ASP中下拉列表的问题.净CreateUserWizard

本文关键字:问题 CreateUserWizard 下拉列表 ASP 自定义 | 更新日期: 2023-09-27 18:09:44

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

在这里,我使用dropdownlist来填充用户注册时的国家。在page load中,它的人口与预期的一样多。

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的值时,它会生成一个错误,说

系统。FormatException:输入字符串格式不正确

我在OnCreatedUser中所做的是

var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");
var nationality = Convert.ToInt32(national.SelectedValue); <<-(where the error is)

页面的完整代码在

下面
protected void Page_Load(object sender, EventArgs e)
{
        if (!IsPostBack)
        {
            FillDropdown();
        }
    }
    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        var newUser = Membership.GetUser(RegisterUser.UserName);
        var newUserId = (Guid)newUser.ProviderUserKey;
        var name1 = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("fname");
        var name2 = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("lname");
        var comp = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Company");
        var post = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Position");
        var birth = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Bday");
        var mob = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Mobile");
        var aphone = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("altPhone");
        var aemail = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("altEmail");
        var national = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Nationality");      
        var news = (CheckBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Newsletter");
        var title = tit.Text.Trim();        
        var nationality = national.Text;
        var preferred = method.Text.Trim();
        var newsleter = news.Checked;

        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);
        var continueUrl = RegisterUser.ContinueDestinationPageUrl;
        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/";
        }
        Response.Redirect(continueUrl);
    }
    public void FillDropdown()
    {
        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);
    }

}

有任何想法将不胜感激。由于

自定义ASP中下拉列表的问题.净CreateUserWizard

能否将Page_Load方法中填充DropDownList的代码放在!IsPostBack下?

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,这给了你错误消息