Я так не думаю, поскольку проверка выполняется с помощью следующего кода в 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, она вернется, чтобы укусить вас