0

私のビューモデルは、属性を持つプロパティを持つ抽象クラスから継承するクラスから継承し[Required]ますが、ルールは DOM に表示されず、目立たない検証ではエラーがキャッチされません。

表示属性は問題なく通過しますが、検証 DOM 属性はテキストエリアに追加されません

私の見解はこれを持っています:

@model FormPersonView
....
@Html.TextAreaFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)

私のコードにはこれがあります:

public class FormPersonView : Person
{
    //View related stuff
    .....
    .....
}

public class Person : BasePerson
{
    //Person related stuff - validation for these work!
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}

public abstract class BasePerson
{
    //Base person stuff - validation for this doesn't work!
    public string Id { get; set; }

    [Required]
    [Display("Short description of the person")]
    public string Description { get; set; }
}

1 レベルの継承では機能するのに 2 レベルでは機能しないのはなぜですか? サーバー側で動作します。

4

1 に答える 1

1

まさにこの問題がありました。ビューを定義している間、モデルは定義した型になります@model FormPersonView。子からプロパティを派生させたとしても、データ注釈はその特定の型でのみ機能します。それらのデータ注釈は関与しません。

私のプロジェクトで思いついた解決策は、データ注釈が適切に機能するために必要な型のエディター テンプレートを定義し@EditorFor、それらのモデルを呼び出すことでした。そのとき初めて、データ注釈が期待どおりに機能しました。

これがお役に立てば幸いです。

于 2012-08-25T15:16:35.300 に答える