自定义模型绑定器 - 如何重新验证

时间:2010-09-21 04:37:56

标签: asp.net-mvc custom-model-binder

我正在使用ASP.NET MVC 2,想要弄清楚如何在使用自定义绑定器填充模型后重新触发模型验证。

所以,我从几个与预订和旅行者相关的EF课程开始(每个预订可以有一个或多个旅行者)

这是我用来在预订上留下讽刺的好友课程:

[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似乎在我的自定义模型绑定器有机会将旅行者添加到预订对象之前设置,即使在完成之后所以,ModelState [“Travelers”]仍然包含验证错误,说必须至少有一个旅行者附加。

自定义模型绑定器完成后,有没有办法重新触发验证?

3 个答案:

答案 0 :(得分:4)

您是否尝试过TryValidateModel课程中的Controller方法?

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

答案 1 :(得分:0)

答案 2 :(得分:-2)

修复错误项后,可以使用

清除ModelState
ModelState.Clear();

然后使用

重新验证
ModelState.IsValid