SORU
19 Mayıs 2009, Salı


ModelState.NerdDinner içinde ASP.NET MVC için geçerli İsValid?

Professional ASP.NET MVC 1.0 NerdDinner örnek üzerinde feryat (ücretsiz NerdDinner sürümü sayfa 89) kopyalanan yeni bir yemek oluşturmak için bir yöntem var.

ModelState denetler.Gerçek İsValid. Eğer model veritabanı (veri türü dönüşümleri, geçersiz biçim, ama iş kuralları ile randevu gibi yakalar) için geçerli olup olmadığını kontrol etmek gibi görünüyor. Bu doğru mu?

Formu gönderirken, eğer tarihi bir hata varsa, ModelState.İsValid yanlış olacak ve sadece tarih için AddRuleViolations idam değildi çünkü bir hata, ama geri alırsınız. Sen ModelState için işaretini kaldırın.Tamamen İsValid, sonra geçersiz olduğunda, tüm hataları (özel durum nedeniyle), bir tarih işaretleme dahil olursun. Neden ModelState için kontrol edin.Hiç İsValid var mı? Bir şey mi kaçırdım?

// 
// POST: /Dinners/Create 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) {
    if (ModelState.IsValid) {
        try {
            dinner.HostedBy = "SomeUser"; 

            dinnerRepository.Add(dinner);
            dinnerRepository.Save();

            return RedirectToAction("Details", new {id = dinner.DinnerID }); 
        } catch {
            ModelState.AddRuleViolations(dinner.GetRuleViolations());
        } 
    } 
    return View(dinner); 
}

CEVAP
19 Mayıs 2009, Salı


ModelState.IsValid Eğer herhangi bir model hataları ModelState için eklenmiş olup olmadığını size bildirir.

Varsayılan model binder temel türü dönüştürme sorunları için bazı hatalar ekler (örneğin, bir sayı olmayan bir şey için geçen "") int. ModelState daha tam olarak her ne kullanıyorsunuz göre doldurabilirsiniz.

DataAnnotations model binder doğrulama hataları DataAnnotations alınan model devlet dolduracaktır örnek modeline bağlıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • chickenby

    chickenby

    2 HAZİRAN 2008