Hej Man kan ju lösa det utan att behöva göra det när man sätter ihop entiteten på andra sätt.Dropdownlist.SelectecValue text till int
Jag använder följande kod för hämta data som användaren matat in i webbformuläret och sedan sparar till databasen.
protected void btnSave_Click(object sender, EventArgs e)
{
Data.Sequel.Userprofile userProfile = new Data.Sequel.Userprofile();
userProfile.Username = txtUsername.Text;
userProfile.Firstname = txtFirstname.Text;
userProfile.Lastname = txtLastname.Text;
userProfile.Password = txtPassword.Text;
userProfile.Phone1 = txtPhone1.Text;
userProfile.Phone2 = txtPhone2.Text;
userProfile.Phone3 = txtPhone3.Text;
userProfile.DepartmentId = int.Parse(ddlDepartment.SelectedValue);
userProfile.LocationId = int.Parse(ddlLocation.SelectedValue);
userprofileRepository.Add(userProfile);
userprofileRepository.Save();
}
Min fråga är:
Måste man använda int.Parse(ddlDepartment.SelectecValue)
userProfile.LocationId är en Int i databasen och SelectedValue är en string.
Förstår att den inte tar emot detta men det måste finnas ett snyggare sätt att hantera detta på?
Man kan ju köra en TryParse och tilldela en inte värdet om den lyckas, men jag tycker det borde finnas alternativa sätt att lösa detta på.
Någon som har en idé?Sv:Dropdownlist.SelectecValue text till int
Property på själva formuläret, som gör omvandlingen:
...
userProfile.Phone3 = frm.Phone3;
userProfile.DepartmentId = frm.DepartmentID;
...
Detta flyttar ju bara ut själva hanteringen i separata funktioner. I samma veva kan man ju också kanske vilja få själva entiteten att komma bort från sparandet helt och hållet:
protected void btnSave_Click(object sender, EventArgs e)
{
Data.Sequel.Userprofile userProfile = frm.ToUserprofile();
userprofileRepository.Add(userProfile);
userprofileRepository.Save();
}
Sen kan man ju också binda kontrollerna till objekt, eller göra wrappers runt kontrollerna som bara kan leverera vissa saker etc. Personligen tycker jag att det som är snyggast och lättast att förstå är något i stil med:
protected void btnSave_Click(object sender, EventArgs e)
{
if(everythingOk())
Data.Sequel.Userprofile userProfile = frm.ToUserprofile();
userprofileRepository.Add(userProfile);
userprofileRepository.Save();
else
DisplayError();
}
EverythingOK gör själva testet, medan ToUserprofile antar att allt är ok, och behöver därmed inte hantera några skumma fall, utan konverterar rakt av.
Inte särskilt defensive, men koden blir rätt slimmad.