Я ищу способ вернуть следующую информацию из моего пользовательского кода проверки:
public enum ValidationErrorTypeFlags
{
Error_Input = 1 << 0, // a "field specific" error which is checked both clientside and serverside
Error_Input_ServerSide = 1 << 1, // a "field specific" error which can only be checked serverside
Error_General = 1 << 2 // serverside general error
}
Внутри кода проверки (либо IValidatableObject, либо ValidationAttribute), когда я обнаруживаю ошибку, я хотел бы иметь возможность связать один из вышеуказанных типов ошибок с ValidationResult.
Затем я хочу иметь возможность перебирать ошибки проверки либо в контроллере, либо в представлении и различать эти типы ошибок.
В настоящее время я использую MVC 3 (с удовольствием обновился до 4).
NB:
- ModelState не сохраняет ValidationResults AFAIK — вы можете получить доступ только к ошибкам в ViewData.ModelState.Values.Items[x].Errors — и они были преобразованы в System.Web.Mvc.ModelError
- Кажется, что проверка MVC позволяет вам получить доступ к результатам проверки типа [ключ, «сообщение об ошибке»] только после завершения проверки.
Хак, который я использую в настоящее время, заключается в том, чтобы украсить сообщение об ошибке внутри пользовательского кода проверки:
var field = new[] { validationContext.DisplayName };
return new ValidationResult("+Invalid format - use yyyy-mm-dd", field);
А затем ищите сообщения об ошибках, которые начинаются с +,-,* в контроллере.