1

У меня есть представление для добавления очень простые объекты:ModelState.IsValid = верно для не действительной модели

@Html.ValidationSummary(true) 
@using (Html.BeginForm()) 
{ 
    <div class="editor-label"> 
     @Html.LabelFor(tag => tag.Name) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(tag => tag.Name) 
     @Html.ValidationMessageFor(tag => tag.Name) 
    </div> 
    <input type="submit" value="Insert" class="submit_btn" /> 
} 

Я сделал контроллер так:

if (ModelState.IsValid) 
{ 
    ... 
    context.Tags.Add(Tag); 
    context.SaveChanges(); 
    return RedirectToAction("Index"); 
} 
return View(Tag); 

Модель генерируется из схемы базы данных (как часть edmx). Свойству nullable свойства имени поля присваивается значение false.

В некотором смысле, для пустого ввода «имя» свойство ModelState.IsValid является истинным, и оно пытается его сохранить (при SaveChanges() он выходит из строя с ошибкой проверки). Зачем?

ответ

4

IsValid Недвижимость ModelState не имеет ничего общего с вашими сущностями. ModelState рассматривает атрибуты, с которыми вы украсили ваши свойства модели.

Например:

public class Tag { 

    [Required] 
    public string Name { get; set; } 
} 

Было бы хорошо, чтобы отметить, что с помощью ваших объектов базы данных в качестве моделей для вашего проекта MVC не может быть лучшей идеей. Подумайте, используя картографию для сопоставления объекта с моделью и наоборот.

+1

+1 не использовать объекты вашей базы данных в вашем представлении –

0

Вам нужно будет добавить Обязательный атрибут в Свойство внутри частичного класса, просто «не-nullable» не будет делать.