Проблема с DataAnnotations в частичном классе - PullRequest
2 голосов
/ 21 января 2010

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

[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 ]

1 голос
/ 26 января 2010

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

1 голос
/ 26 сентября 2010

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

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

1 голос
/ 21 января 2010

Я склонен использовать 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; }
    }
}
0 голосов
/ 25 января 2013

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

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

Удачи

...