2


1

部分クラスの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; }
    }
}

Project.Web.AccountControllersでFalalaをモデルとして使用し、メソッドを使用して違反を取得します。 私が持っていたときに検証が働いた

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

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

ただし、上記の部分クラスを使用した後ではありません。 私は本当に部分クラスを使用する必要があります。 私はここで何をしていますか?

ありがとうございます。

4 Answer


1


私は次のように `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; }
    }
}


1


同様の問題に遭遇し、ModelクラスとMetadata "buddy"クラスの両方を同じ名前空間に置くことで、ようやく機能するようになりました。 私は一種の.net初心者ですので、名前空間に正確には慣れておらず、何か他のものになる可能性があります。


1


ネストされたクラスの内部が原因である可能性があります…​?

似たような問題があり、ネストされたメタデータクラスの個々のフィールドをパブリックにしないことにすべてが要約されたように見えます。


0


これが役立つかどうかはわかりませんが、同様の問題があり、それに何日も費やしています。 最後に、それはほんの小さな変更でした。

設定ファイルで `UnobtrusiveJavaScriptEnabled`をfalseに変更しました

がんばろう