ASP.NET MVC 3: Required steps for unobtrusive client-side validation of dynamic/AJAX content
What are the complete set of Steps Required for client-side unobtrusive validation to work for dynamically inserted form fields?
Relevant SO posts
ASP.NET MVC 3 unobtrusive client-side validation with dynamic content - He needed the unobtrusive validation attributes to show up in the generated HTML and did so by calling BeginForm
ASP.Net MVC 3 validation on AjaxForm - The asker was using Ajax.BeginForm
which uses MicrosoftAjax instead of JQuery.validation.
PartialView and unobtrusive client validation not working - He had the problem with unobtrusive validation attributes not showing up and overrode ViewContext.FormContext
as a workaround.
ASP.NET MVC 3: Generate unobtrusive validation when BeginForm is on the layout - Workaround for unobtrusive validation attributes not showing up in HTML
Relevant Links
Brad Wilson's Unobtrusive Client Validation in ASP.NET MVC 3
The Complete Guide To Validation In ASP.NET MVC 3 - Part 1
The Complete Guide To Validation In ASP.NET MVC 3 - Part 2
Unobtrusive Client-side Validation with Dynamic Contents in ASP.NET MVC 3
Solution 1:
At this point I believe the following is a complete set of requirements:
- Create a form with
Html.BeginForm
- Turn on
ClientValidationEnabled
- Turn on
UnobtrusiveJavaScriptEnabled
- Set appropriate validation attributes on the model's properties (not fields)
- If the Html Helpers being used to create the form elements are not on the same form as the
Html.BeginForm
call, use a relevant workaround (see workaround 1 and workaround 2) - Include
jquery
,jquery.validate.js
, andjquery.validate.unobtrusive.js
files, in that order - Verify that the unobtrusive validation attributes are present in the HTML
- If using custom validators:
- ensure that they are added to
jQuery.validator.unobtrusive.adapters
- ensure that they are added to the jQuery validation plugin by calling
jQuery.validator.addMethod
. - ensure that the above happen before
$(document).ready()
as at that point it's too late
- ensure that they are added to
- Call
jQuery.validator.unobtrusive.parse
orjQuery.validator.unobtrusive.parseElement
on elements added dynamically after the initial page load.