Проблема с DataAnnotations в частичном классе

Итак, в моем проекте mvc Project.Repository у меня есть

[MetadataType(typeof(FalalaMetadata))]
public partial class Falala
{
    public string Name { get; set; }

    public string Age { get; set; }

    internal sealed class FalalaMetadata
    {
        [Required(ErrorMessage="Falala requires name.")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Falala requires age.")]
        public string Age { get; set; }
    }
}

Я использую Falala в качестве модели в своем Project.Web.AccountControllers и использую метод для получения нарушений. Проверка работала, когда у меня было

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

    [Required(ErrorMessage="error")]
    public string Age { get; set; }
}

но не после использования частичного класса сверху. Мне действительно нужно использовать частичный класс. Что я здесь делаю неправильно?

Спасибо!


person maze    schedule 20.01.2010    source источник
comment
Я вставил ваш код в новое приложение MVC, и проверка работает нормально. Можете ли вы опубликовать свой контроллер и просмотреть код?   -  person John Farrell    schedule 21.01.2010


Ответы (4)


Я склонен использовать классы Metadata следующим образом.

[MetadataType(typeof(FalalaMetadata))]
public partial class Falala
{
    public string Name { get; set; }

    public string Age { get; set; }
}
public class FalalaMetadata
{
    [Required(ErrorMessage="Falala requires name.")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Falala requires age.")]
    public string Age { get; set; }
}

Что отлично работает для меня.

Следующее также должно работать (и это лучший способ реализации классов метаданных):

[MetadataTypeAttribute(typeof(Falala.FalalaMetaData))]
public partial class Falala
{
    internal sealed class FalalaMetadata
    {
        [Required(ErrorMessage="Falala requires name.")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Falala requires age.")]
        public string Age { get; set; }
    }
}
person Martijn Laarman    schedule 20.01.2010
comment
Это странно, мои проекты, как правило, заполнены частичными классами из веб-сервисов, и у меня нет проблем с назначением классов друзей метаданных. С какой версией DataAnnotation вы работаете? - person Martijn Laarman; 21.01.2010
comment
System.ComponentModel.DataAnnotations.dll v3.6. Спасибо. - person maze; 21.01.2010

Я столкнулся с аналогичной проблемой и, наконец, заставил ее работать, поместив класс Model и класс «приятеля» Metadata в одно и то же пространство имен, хотя мои ссылки казались в порядке. Хотя я немного новичок в .net, поэтому мне не совсем комфортно с пространствами имен, может быть что-то еще.

person Dzejms    schedule 26.01.2010

Может ли быть причиной Internal во вложенном классе...?

У меня была аналогичная проблема, и, похоже, все сводилось к тому, чтобы не делать отдельные поля во вложенном классе метаданных общедоступными. Интересно, вызывает ли создание всего класса внутреннюю ту же проблему?

person Grant    schedule 26.09.2010

Не уверен, что это поможет, но у меня была похожая проблема, и я потратил на нее дни. В конце концов, это было просто небольшое изменение, которое помогло мне.

Я изменил UnobtrusiveJavaScriptEnabled на false в файле конфигурации

Удачи

person Tony Sebastian    schedule 25.01.2013