fieldID является обязательным. Ошибка при попытке добавить новый объект через MVC3, ModelStat.IsValid ложные ошибки? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть эта ViewModel:

    [Key]
    public long KlijentID { get; set; }

    [Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(Resources))]
    [StringLength(50, ErrorMessageResourceName = "StringLength50", ErrorMessageResourceType = typeof(Resources))]
    public string ImePrezime { get; set; }

    [Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(Resources))]
    [StringLength(50, ErrorMessageResourceName = "StringLength50", ErrorMessageResourceType = typeof(Resources))]
    public string Adresa { get; set; }

    //Rest of the Class, not important for the question.

В представлении у меня есть:

    @using (Html.BeginForm("Edit", "Klijenti"))
    {
     @Html.HiddenFor(model => model.KlijentID)

     <div class="editor-label">
        @Html.LabelFor(model => model.ImePrezime)
     </div>
     <div class="editor-field">
        @Html.EditorFor(model => model.ImePrezime)
        @Html.ValidationMessageFor(model => model.ImePrezime)
     </div>
     <div class="editor-label">
        @Html.LabelFor(model => model.Adresa)
     </div>
     <div class="editor-field">
        @Html.EditorFor(model => model.Adresa)
        @Html.ValidationMessageFor(model => model.Adresa)
     </div>
     <p><input type="submit" value="Spremi" /><p>
    }

Когда я использую его для обновления объекта из базы данных, действие контроллера работает нормально:

    if (!ModelState.IsValid) throw new ValidationException();
    var k=new Klijent();
    Mapper.Map(klijent, k);
    repo.SaveKlijent(k);
    TempData["msg"] = MyResources.Properties.Resources.SaveDone;
    return RedirectToAction("Index", page);

Но когда я пытаюсь добавить новый объект, ModelState.IsValid не может сказать, что требуется KlijentID. ErrorMessage:"The KlijentID field is required."

Я проверил, он установлен в 0, как и должно быть для нового объекта. В чем здесь проблема?

UPDATE: Я пытался добавить это к моему Application_Start в Global.asax

    DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

В результате я все еще получаю ошибку проверки, просто теперь она говорит: ErrorMessage: "A value is required."

Становится немного странно, просто кажется, что это значение очень плохо. Призраки в машине?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2015

У меня была такая же проблема. Я установил свой первичный ключ в обнуляемый тип, и все заработало как шарм.

0 голосов
/ 23 ноября 2011

Это потому, что во входных данных из формы не было значения. Механизм проверки проверяет словарь значений и, если он не найден, добавляет ошибку ModelState. Значение равно 0, потому что это значение по умолчанию типа int.

Чтобы решить эту проблему, просто добавьте @ Html.HiddenFor (model => model.Id) в ваше представление Create.

...