Проблема с 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; }
}

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

Спасибо!

4 ответа

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

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

Я столкнулся с подобной проблемой и, наконец, начал работать, поместив и класс Model, и класс "метаданных" в одно и то же пространство имен, хотя мои ссылки казались нормальными. Я вроде.net noob, хотя, так что я не совсем доволен пространствами имен, может быть что-то еще.

Я склонен использовать 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; }
    }
}

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

Я изменился UnobtrusiveJavaScriptEnabled ложь в конфигурационном файле

Удачи

Другие вопросы по тегам