Yanıtlar:
"0 hata ve IsValid == false olabilir mi" hakkında: https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41 adresinden MVC kaynak kodu burada.
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
Şimdi, olamaz gibi görünüyor. Eh, bu ASP.NET MVC v1 için.
Muhtemelen Visual Studio'da programlama yaptığınız için, bu kadar kolay hata ayıklama adımları için kesme noktaları kullanma olasılığından yararlanmanız daha iyi olur (sizin durumunuzda olduğu gibi sorunun ne olduğu hakkında bir fikir edinme). Bunları sadece öne / ModelState.isValid'i kontrol ettiğiniz yere yerleştirin ve ModelState'in üzerine gelin. Artık içindeki tüm değerlere kolayca göz atabilir ve hangi hatanın geçersiz dönüş yanlışına neden olduğunu görebilirsiniz.
var asdf = ModelState.Values.Where(v => v.Errors.Count > 0);
size yardımcı olabilir
Aşağıdaki kodu denetleyicinizin ActionResult'una yapıştırın ve hata ayıklayıcıyı bu noktaya yerleştirin.
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
veya ile yineleyin
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
Bazen bir ciltleyici hata mesajı olmadan bir istisna atar. Neyin yanlış olduğunu bulmak için aşağıdaki kod parçacığı ile istisnayı alabilirsiniz:
(Genellikle ciltleyici dizeleri karmaşık türlere dönüştürmeye çalışıyorsa vb.)
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
ModelsState.IsValid kontrolünü kaldırırsanız ve hata yaparsanız, bu satırı ((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
kopyalayıp Visual Studio'daki izleme bölümüne yapıştırırsanız, hatanın tam olarak ne olduğunu size verecektir. Hatanın nerede olduğunu kontrol etmek için çok zaman kazandırır.
Denetleyicideki ModelState özelliği aslında bir ModelStateDictionary nesnesidir. Sözlükteki anahtarlar arasında yineleme yapabilir ve bu belirli alanın geçerli olup olmadığını kontrol etmek için IsValidField yöntemini kullanabilirsiniz.