1

我正在使用 ASP.NET MVC 2,并且想弄清楚在使用自定义活页夹填充模型后如何重新触发对模型的验证。

所以,我从几个相关联的 EF 类开始,Booking 和 Traveler(每个预订可以有一个或多个旅行者)

这是我用来在 Booking 上放置 balidation 的伙伴类:

[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 ["Travellers"] 仍然包含验证错误,指出必须至少连接一名旅行者。

自定义模型绑定器完成后,有什么方法可以重新触发验证?

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 回答