В моей модели представления есть свойство, представляющее собой пользовательский класс со свойством value.
, например
class mycustomobj
{
public int? Value {get; set; }
}
public class myviewmodel
{
[DefaultablePercentRange]
public property mycustomobj { get; set; }
}
У меня есть настраиваемый атрибут диапазона DefaultablePercentRange , которым я украшаю это свойство, чтобы можно было проверить входные данные. С этим связан соответствующий валидатор JavaScript для клиентской стороны.
JavaScript:
Sys.Mvc.ValidatorRegistry.validators["defaultablePercentRange"] = function (rule) {
var _minimum = rule.ValidationParameters["minimum"];
var _maximum = rule.ValidationParameters["maximum"];
return function (value, context) {
if (!value || !value.length) {
return true; // return true as null values allowed
}
var n = Number.parseLocale(value);
return (!isNaN(n) && _minimum <= n && n <= _maximum);
};
}
Я также использую Html.EditorFor в своем представлении с шаблонами, чтобы я мог выводить свойство как mycustomobj.Value, а не просто mycustomobj. Таким образом, свойство view в html оказывается примерно таким:
<input class="defaultable tiny" default="0" defaultwhen="0" id="mycustomobj_Value" name="mycustomobj.Value" type="text" value="" placeholder="0" style="">
Теперь моя проблема в том, что валидация javascript передает null в мою функцию проверки на стороне клиента. После значительного количества исследований я обнаружил, что это происходит потому, что JSON, созданный для моего пользовательского DataAnnotationsModelValidator, не использует полный идентификатор свойства. Например, созданный JSON:
{"FieldName":"mycustomobj","ReplaceValidationMessageContents":true,"ValidationMessageId":"mycustomobj_validationMessage","ValidationRules":[{"ErrorMessage":"This value must be in the range 0 - 100","ValidationParameters":{"minimum":0,"maximum":100},"ValidationType":"defaultablePercentRange"},{"ErrorMessage":"This value must be in the range 0 - 100","ValidationParameters":{"minimum":0,"maximum":100},"ValidationType":"defaultablePercentRange"}]}
Где мне нужно:
{"FieldName": "mycustomobj.value", "ReplaceValidationMessageContents": true, "ValidationMessageId": "mycustomobj_value_validationMessage", "ValidationRules": [{"ErrorMessage": "Это значение должно быть в диапазоне 0 - 100Parameters, Valid ": {" минимум ": 0," максимум ": 100}," ValidationType ":" defaultablePercentRange "}, {" ErrorMessage ":" Это значение должно находиться в диапазоне 0 - 100 "," ValidationParameters ": {" минимум ": 0," максимум ": 100}," ValidationType ":" defaultablePercentRange "}]} * +1021 *
Мой вопрос Как я могу получить правильное имя свойства, сериализованное для проверки на стороне клиента, чтобы моя проверка на стороне клиента работала. Мой сервер работает нормально.
Пожалуйста, дайте мне знать, если кому-то нужна дополнительная информация.