我不这么认为,因为验证是DefaultModelBinder
protected virtual void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) {
Dictionary<string, bool> startedValid = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(bindingContext.ModelMetadata, controllerContext).Validate(null)) {
string subPropertyName = CreateSubPropertyName(bindingContext.ModelName, validationResult.MemberName);
if (!startedValid.ContainsKey(subPropertyName)) {
startedValid[subPropertyName] = bindingContext.ModelState.IsValidField(subPropertyName);
}
if (startedValid[subPropertyName]) {
bindingContext.ModelState.AddModelError(subPropertyName, validationResult.Message);
}
}
用下面的代码完成您可以尝试使用一个隐藏的表单字段中Person.Address财产像这样欺骗模型绑定
<%= Html.HiddenFor(m => m.Address) %>
或
<%= Html.HiddenFor(m => m.Address.FirstLine) %> //just pick any property
这可以揭开序幕模型联编程序进行验证。虽然如果这确实起作用,那么你将不可能投入价值,因为它是一个隐藏的表单字段,但我相信这是你想要的:)
或者你可以尝试编写你自己的模型绑定器,但从我的经验来看,如果你开始反对MVC框架的谷物,它会回来咬你
你只是想要一个空验证呢? – Wil 2010-07-26 12:54:53
例如,Person.HomeAddress.Street/City可能具有必需的属性(或任何其他验证属性)。 而且,Person.HomeAddress不应该为空。 – user191898 2010-07-26 20:35:42