Подтвердить что ты не робот

Почему ModelState.IsValid всегда возвращает false в mvc

В моем контроллере этот код:

[HttpPost]
        public ActionResult Edit(Company company, FormCollection IsCostCenters)
        {
            if (ModelState.IsValid)
            {
                Company objNewCompany = new Company();
                //oParty.CostCenters.Clear();

                using (PaymentAdviceEntityContainer db1 = new PaymentAdviceEntityContainer())
                {
                    objNewCompany = db1.Companies.Find(company.Id);

                    objNewCompany.CostCenters.Clear();

                    string[] temp = IsCostCenters["CostCenters"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var s in temp)
                    {
                        if (s != "false")
                        {

                            CostCenter oCostCenter = new CostCenter();
                            oCostCenter = db1.CostCenters.Find(Convert.ToInt32(s));
                            objNewCompany.CostCenters.Add(oCostCenter);
                        }
                    }
                    db1.SaveChanges();
                }

                db.Entry(company).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.CreatedById = new SelectList(db.Employees, "Id", "FirstName", company.CreatedById);
            return View(company);
        }

И мой код вида ниже

@using PaymentAdviceEntity;
@{

    ViewBag.Title = "Edit";
    List<CostCenter> clist = new List<CostCenter>();
    clist = ((List<CostCenter>)ViewBag.CostCenters).ToList();
}



                       <div style="line-height: 22px; width: 100%;height :3%; float: left; ">
                       @{
    foreach (var item in clist)
    {                      
                             <div  style="line-height: 22px; width: 28%; float: left;">
                                                <span class="checkbox">@Html.CheckBox("CostCenters", item.IsChecked, new { @value = item.Id })</span>
                                               <span>@Html.DisplayFor(modelItem => item.Name)</span>

                              </div> 

    }
}

Итак, пожалуйста, что такое причина ModelState.IsValid возвращает false во время публикации страницы...

4b9b3361

Ответ 1

Пожалуйста, разместите свой класс моделей.

Чтобы проверить ошибки в состоянии модели, используйте следующий код

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

или вы также можете использовать

var errors = ModelState.Values.SelectMany(v => v.Errors);

поместите точку останова в указанной строке и посмотрите, какие ошибки в вашем ModelState.

Ответ 2

Как говорит Брэд Уилсон в его ответе здесь:

ModelState.IsValid сообщает вам, были ли какие-либо ошибки модели добавлены в ModelState.

Связующее устройство по умолчанию добавит некоторые ошибки для базового типа (например, передача не номера для чего-то который является "int" ). Вы можете полностью заполнить ModelState на основе независимо от используемой системы проверки.

Попробуйте использовать: -

if (!ModelState.IsValid)
{
    var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));

    // Breakpoint, Log or examine the list with Exceptions.
}

Если это поможет вам поймать ошибку. Предоставлено это и this

Ответ 3

"ModelState.IsValid" сообщает вам, что модель потребляется представлением (т.е. PaymentAdviceEntity) удовлетворяет всем типам проверки или не задана в свойствах модели DataAnotation.

В этом коде представление не связывает никаких свойств модели. Поэтому, если вы помещаете какие-либо DataAnotations или валидацию в модель (то есть PaymentAdviceEntity). то проверки не удовлетворяют. скажем, если какие-либо свойства в модели - это имя, которое требуется в модели. Тогда значение свойства остается пустым после публикации. Так что модель недействительна (т.е. ModelState.IsValid возвращает false). Вам нужно удалить проверки уровня модели.