ModelState.IsValid = true для недопустимой модели - PullRequest
1 голос
/ 07 марта 2012

У меня есть вид для добавления очень простых объектов:

@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.

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

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

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

Например:

public class Tag {

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

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

0 голосов
/ 07 марта 2012

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

...