2011-09-26 1 views
0

웹 응용 프로그램에 사용자 정의 ASP.NET CreateUserWizard을 사용하고 있습니다.문제가있는 ASP.NET 사용자 정의 CreateUserWizard에 DropDownList가 있습니다

여기서는 사용자 등록시 국가를 채우는 데 dropdownlist을 사용했습니다. page load에서 예상대로 국가를 채 웁니다. 나는 그것이 나에게

System.FormatException을 말하는 오류를 생성하는 OnCreatedUser 이벤트에 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

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); 
    } 

}

이하입니다. 감사

+1

var 국적 줄에 중단 점을 설정하십시오. 당신은 국가에 어떤 가치가 있습니까? 어떤 값이 national.SelectedValue입니까? –

+0

예 이미 그랬지만 값을 가져 오지 않았습니다 –

+0

드롭 다운 또는 createuserwizard에 대해 viewstate가 활성화되어 있는지 확인하십시오. –

답변

1

당신은 !IsPostBack에서 Page_Load 방법에 DropDownList을 채우는 코드를 넣을 수 있습니까?

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로 빈 문자열을 변환하는 데 노력했다.

+0

예 thats 현재 수행중인 작업 –

+0

응용 프로그램을 디버그하고 DropDownList 항목이 int로 변환되는 것을 확인하십시오. SelectedIndex에 대해 – Arief

+0

을 선택하면 -1이 선택됩니다. var nationality = national.Text를 사용하여 시도해보고 값을 " –