У меня есть эти 2 класса моделей, обернутые в одну модель.Строго типизированное представление и проверка на стороне сервера работают достаточно хорошо, но я не могу заставить проверку на стороне клиента работать для этого класса обернутой модели.
Вот мой код на стороне клиента:
Sys.Mvc.ValidatorRegistry.validators.usernameEmail = function (rule) {
var emailProperty = rule.ValidationParameters.emailProperty;
var message = rule.ErrorMessage;
return function (value, context) {
if (!value || !value.length) {
return true;
}
var usernameField = context.fieldContext.elements[0];
var emailFieldId = $('input[name = "' + emailProperty + '"]').attr('id');
var emailField = $get(emailFieldId, usernameField.form);
//...validation stuff...
};
};
Проблема в том, что emailProperty возвращает только имя свойства, указанное в его модели, т.е.«EmailAddress», но строго типизированное представление назначает имя как «Model1Name.EmailAddress», так как оно называется как:
<%: Html.TextBoxFor(m => m.Model1Name.EmailAddress)%>
Таким образом, при поиске свойства он возвращает ноль, и я получаю ошибку.Поэтому я думаю, что мои вопросы здесь будут такими:
- Есть ли способ получить назначенное имя модели ("Model1Name"), чтобы я мог добавить его с именем свойства?
- МожетПередать назначенное имя модели из классов DataAnnotations / ModelValidationRule?Если да, то как?
Вот мои классы моделей:
public class Model1
{
public string EmailAddress{ get; set; }
...
}
public class Model2
{
[UsernameEmail]
public string Username{ get; set; }
...
}
public class WrappedModel
{
public Model1 Model1Name{ get; set; }
public Model2 Model2Name { get; set; }
}
Примечание: проверка на стороне клиента хорошо работает для отдельных представлений модели.
Редактировать После большой отладки я обнаружил, что
viewContext.ViewData.TemplateInfo.GetFullHtmlFieldId("EmailAddress");
в моем DataAnnotationsModelValidator возвращает только имя параметра "EmailAddress" и пропускает свой префикс "Model1Name", возвращая неверный идентификатор.
Любая помощь будет оценена.Спасибо.