Аннотация данных MVC - Обязательное поле не работает

StackOverflow https://stackoverflow.com/questions/1416284

Вопрос

Привет, у меня есть следующий код в моем приложении, но только с двумя полями он не работает.

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

Выполняется и проходит следующий тест:

    [TestMethod]
    public void SiteConstruction_MODEL_DevelopmentPM_Is_Required()
    {
        //arrange
        var propertyInfo = typeof(SiteConstructionMetadata).GetProperty    
                           ("DevelopmentPM");

        //act
        var attribute = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute), 
                        true).Cast<RequiredAttribute>().FirstOrDefault();

        //assert
        Assert.IsNotNull(attribute);
    }

Мой контроллер выглядит как:

        TryUpdateModel(siteConstruction);

        if (!ModelState.IsValid)
           return View(siteConstruction);

У меня есть другие обязательные поля в модели, и с ними все в порядке.Это поле равно нулю (я проверил), но не делает модель недействительной - поэтому проверка не выполняется и при сохранении выдается ошибка.

Мой Взгляд

    <li>
        <label for="DevelopmentPM">
            <strong>Development PM:</strong></label>
        <%= Html.TextBox("DevelopmentPM") %>
        <%= Html.ValidationMessage("DevelopmentPM", "*") %>
    </li>

Я просмотрел свой .dbml (Linq to SQl), правописание выглядит нормально.

Я... я упускаю что-то простое - пожалуйста, схожу с ума.

Спасибо

Дэви

Это было полезно?

Решение

[MetadataType(typeof(SiteConstructionMetadata))] выше моего частичного класса я считал само собой разумеющимся, что он у меня там есть.

В следующий раз, вместо того чтобы публиковать фрагменты, я, думаю, выложу их все - смеоне вы заметили это довольно быстро.

Дэви

Другие советы

Убедитесь, что вы делаете DataAnnotationsModelBinder связующее устройство модели по умолчанию тоже.Добавьте следующее в свой Global.asax.cs:

ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();

и убедитесь, что вы ссылались на System.ComponentModel.DataAnnotations.dll сборка в вашем проекте.Видишь этот учебник для получения более подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top