1

私は ASP.NET MVC 2 を使用しており、カスタム バインダーを使用してモデルにデータが入力された後に、モデルの検証を再トリガーする方法を理解したいと考えています。

そのため、関連付けられているいくつかの EF クラス、予約と旅行者 (各予約には 1 人以上の旅行者を含めることができます) から始めます。

予約にバリデーションを設定するために使用しているバディ クラスは次のとおりです。

[MetadataType(typeof(Booking_Validation))]
public partial class Booking {
    // partial class compiled with code produced by VS designer
}

[Bind(Include="Name")]
public class Booking_Validation {

    [Required(ErrorMessage="Booking name required")]
    public string Name { get; set; }

    [AtLeastOneTraveller(ErrorMessage="Please enter at least one traveller")]
    public EntityCollection<Traveller> Travellers;

}

public class AtLeastOneTraveller : ValidationAttribute {        
    public override bool IsValid(object value) {
        if (value != null) 
            return ((EntityCollection<Traveller>)value).Count > 0;
        return true;            
    }
}

カスタム モデル バインダーを使用して予約と関連付けられている旅行者を設定しますが、ModelState.IsValid は、カスタム モデル バインダーが旅行者を予約オブジェクトに追加する前に設定されているように見えます。 ["Travellers"] には、少なくとも 1 人の旅行者が添付されている必要があるという検証エラーがまだ含まれています。

カスタム モデル バインダーが処理を行った後に検証を再トリガーする方法はありますか?

4

3 に答える 3

4

クラスでTryValidateModelメソッドを試しましたか?Controller

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryvalidatemodel.aspx

于 2010-09-21T09:10:37.177 に答える
0

これを試してください: http://shazwazza.com/post/Custom-MVC-ModelBinder-with-Complex-ModelsObjects-using-built-in-MVC-Validation.aspx

于 2010-10-20T14:36:35.357 に答える
-2

エラー項目を修正したら、を使用してModelStateをクリアできます。

ModelState.Clear();

次に、を使用して再検証します

ModelState.IsValid
于 2013-02-27T08:07:45.170 に答える