If you are adding fields dynamically, and you want to have unobtrusive validation, then you can use following code:
var $nazivIndex = -1; function addNewFieldNaziv() { $nazivIndex++; var $nazivEf = $('#nazivEf'); $nazivEf.append('<p/><input class="text-box single-line valid" id="Naziv' + $nazivIndex + '" name="Naziv' + $nazivIndex + '" type="text" value="Stanko Milosev" data-val="true" data-val-required="The Naziv field is required."/> <span class="field-validation-valid" data-valmsg-for="Naziv' + $nazivIndex + '" data-valmsg-replace="true"></span>'); var form = $("#myID"); form.removeData('validator'); $.validator.unobtrusive.parse(form); }
Validation has to be removed, and then binded again. Also, in your ASP.NET MVC3 view you have to add following scripts:
<script src="/@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
Here you can download my MVC3 application, code is dirty :) but you can see an example if you go on http://localhost:7307/Default1/Edit/1# for instance (Default1 controller, Edit method). Here you can see pure html example, or here you can download packed source. Unfortunately, you will see that this code is also dirty, I have two times $("#myID").validate, on the beginning and on the end, otherwise it didn't want to work, and I have no idea why.
In my MVC3 application in file unobtrusive_validation\unobtrusive_validation\Views\Default1\Edit.cshtml you will see code like:
<script src="/@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> <script src="/@Url.Content("~/Scripts/addFields.js")" type="text/javascript"></script>
and
@using (Html.BeginForm("Edit", "Default1", FormMethod.Post, new { id = "myID" })) {
Without these lines validation will not work, of course in model in the file unobtrusive_validation\unobtrusive_validation\Models\Partner.cs you will see
[Required] public string Naziv { get; set; }
"Naziv" means name btw :)
---
On the end my problem was solved as it was described here. Also, one my simple validation you can find here.