Jak uzyskać walidacje ViewModelu?

0

Witam, w jaki sposób mogę uzyskać walidacje ViewModelu?
Model

public partial class Patient
    {
        public Patient()
        {
            this.Visits = new HashSet<Visit>();
        }

        public int PatientID { get; set; }
        [Required(ErrorMessage = "Podaj imię.")]
        public string name { get; set; }
        [Required(ErrorMessage = "Podaj nazwisko.")]
        public string surname { get; set; }
        [Required(ErrorMessage = "Podaj pesel.")]
        [RegularExpression(@"^\(?([0-9]{11})$", ErrorMessage = "Nieprawidłowy numer pesel.")]
        public string pesel { get; set; }
        [Required(ErrorMessage = "Podaj miasto.")]
        public string city { get; set; }
        [Required(ErrorMessage = "Podaj kod pocztowy.")]
        public string zipCode { get; set; }
        [Required(ErrorMessage = "Podaj e-mail.")]
        [EmailAddress(ErrorMessage = "Nieprawidłowy adres e-mail")]
        public string email { get; set; }
        [Required(ErrorMessage = "Podaj telefon komórkowy.")]
        [RegularExpression(@"^\(?([0-9]{9})$", ErrorMessage = "Nieprawidłowy numer telefonu.")]
        public string phone { get; set; }
    
        public virtual ICollection<Visit> Visits { get; set; }
    }

Viewmodel:

public class ViewModelRp
    {

        public Doctor VmDoctors { get; set; }
        public List<Visit> VmVisits { get; set; }
        public List<Patient> VmPatients { get; set; }
        public List<HoursButton> VmHours { get; set; }
        public List<HoursButton> newVmHours { get; set; }

        public Patient newPatient { get; set; }

   
    }
}

walidacja z modelu Patient nie działa, jak mogę ją wskrzesić :D?
Pozdrawiam

0

Moze napiszesz co robisz z tymi modelami, czym sie objawia to "nie dzialanie" i pokazesz jakis kod operujacy na nich?

0

Ok, stworzyłem ViewModel do wyświetlania wielu modeli na jednym Vidoku, na tym widoku znajduję się formularz właśnie modelu Patient. Uiszczę jeszcze akcje z kontrolera Patient

public ActionResult CreatePatient(ViewModelRp model)
        {
            if (ModelState.IsValid)
            {
                try
                {

                db.Patients.Add(model.newPatient);
                db.SaveChanges();
                    
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        foreach (var ve in eve.ValidationErrors)
                        {
                              TempData["error"] = ve.ErrorMessage;
                        }
                    }
                }
            }
            return RedirectToAction("Index", "Visit", new { id = VisitController.idDr });
        }
0

Robisz jakiegos wielkiego wtfa...

Niech CreatePatient przyjmuje obiekt klasy PatientEditModel, ktora ma zdefiniowane same wlasciwosci typow prostych i stringi, w tej klasie walnij wszystkie te adnotacje i bedzie dzialac i bedzie mialo jakikolwiek sens.

0

a jak chcesz pobrane dane z Formularza zapisać do modelu Patient korzystając z klasy PatientEditModel? trochę Cie nie rozumiem :(

0

Normalnie.

Robisz klase zawierajaca te pole, ktore bedzie mial formularz, a potem ja mapujesz na encje i zapisujesz do bazy. Nie wiem gdzie tu konkretnie widzisz problem. Bo na razie to zrobiles klase Universe, ktora generalnie ma wszystko, ale nijak nie idzie z nia nic zrobic.

0

Kłopot się nie rozwiązał, jeżeli dobrze Cie zrozumiałem

  public ActionResult CreatePatient(Test model)
        {
            DentistEntities db = new DentistEntities();
            var patient = new Patient();
         

            if (ModelState.IsValid)
            {
                patient.name = model.name;
                patient.surname = model.surname;
                patient.pesel = model.pesel;
                patient.city = model.city;
                patient.zipCode = model.zipCode;
                patient.email = model.email;
                patient.phone = model.phone;
                db.Patients.Add(patient);
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Visit", new { id = VisitController.idDr });
        }
      
 public class Test
    {
        public int PatientID { get; set; }
        [Required(ErrorMessage = "Podaj imię.")]
        public string name { get; set; }
        [Required(ErrorMessage = "Podaj nazwisko.")]
        public string surname { get; set; }
        [Required(ErrorMessage = "Podaj pesel.")]
        [RegularExpression(@"^\(?([0-9]{11})$", ErrorMessage = "Nieprawidłowy numer pesel.")]
        public string pesel { get; set; }
        [Required(ErrorMessage = "Podaj miasto.")]
        public string city { get; set; }
        [Required(ErrorMessage = "Podaj kod pocztowy.")]
        public string zipCode { get; set; }
        [Required(ErrorMessage = "Podaj e-mail.")]
        [EmailAddress(ErrorMessage = "Nieprawidłowy adres e-mail")]
        public string email { get; set; }
        [Required(ErrorMessage = "Podaj telefon komórkowy.")]
        [RegularExpression(@"^\(?([0-9]{9})$", ErrorMessage = "Nieprawidłowy numer telefonu.")]
        public string phone { get; set; }
    }
0

Wiec tak małą korekta... w widoku nie mogę odwołać się bezpośrednio do Models.Test z tego względu że zwracam w metodzie Index obiekt ViewModel za pomocą którego generuję dwa modele. Stworzyłem także bezpośrednio w widoku pola do walidacji ale także nie działa. Jakiś pomysł jak odwołać się do klasy Test w widoku? : >

1 użytkowników online, w tym zalogowanych: 0, gości: 1