Я использую asp.net mvc 3 с jquery ненавязчивой проверкой. Недавно я изменился с стандартных DataAnnotations на FluentValidation, и он отлично работает.mvc clientside validation для вложенных (коллекционных) свойств
Моя основная причина для выбора FluentValidation - это необходимость проверки вложенных свойств на моей модели просмотра (но я обнаружил, что есть другие интересные причины для ее использования), что похоже на это (не обращайте внимания на аксессоров, это псевдо):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
Использование FluentValidation я сделать валидатор для Vm и ElementVm и мои тесты унифицированные зеленый, показывая мне на стороне сервера проверки работает.
Клиентская сторона, «Prop» и «AnotherProp» работают - мои правила проверки также работают на стороне клиента, как и ожидалось (как и с DataAnnontation), но все мои элементы не получают никакой проверки на стороне клиента вообще - Я проверяю dom и вижу, что все данные, данные, необходимые данные и т. д. отсутствуют.
Я пробовал разные подходы к генерации html в своих представлениях, но «Prop» и «AnotherProp» генерируются с использованием Html.TextBoxFor (m => m.Prop), в то время как мои элементы генерируются в частичном - вот где проблемы начинаются. Если я выберу Html.TextBoxFor (m => m.Value), все мои текстовые поля Element будут иметь одинаковое имя/id, поэтому я также попытался использовать Html.TextBox (Model.Id) для генерации уникального идентификатора/имени, но все еще не имеет свойств проверки ,
Итак, есть способ сделать мою работу сенарио - я не против переписывать ее немного, но мне бы очень хотелось, чтобы FluentValidation написал мой html для меня.
Моим решением было бы сделать мои собственные помощники Html для создания правильного Html с атрибутами, но это сосать, я думаю, так как мне нужно будет обновлять эти помощники, когда новые релизы/патчи были сделаны либо FluentValidation, jquery validation или ссылку в mvc между ними.
Спасибо! Это работает и должно быть отмечено как ответ. – JustinP8
Кроме того, не забудьте перезагрузить 'ViewData.TemplateInfo.HtmlFieldPrefix =" "', если у вас есть входы после цикла. – JustinP8
@ JustinP8, @counsellorben, @Per: У меня такая же проблема, но это не исправить. Я использую EditorTemplates для моей вложенной коллекции, и все атрибуты 'id' тега 'input' уже имеют префикс соответствующих/эквивалентных «Elements [0]». «ViewData.TemplateInfo.HtmlFieldPrefix» удобен для понимания, но не для меня. @Per отметил, что отсутствуют атрибуты «data-val, data-required и т. Д.». Я заметил то же самое. – tkerwood