I have been getting back into some asp.net MVC 3 development again lately, and working with dynamically loaded views through Ajax.
I want these views to be as "clean" as possible, and obviously not duplicate anything outside of the view. So for these reasons, I do not want to then start including any javascript files which have already been included in the Layouts or "Master" views.
So I have my `_Layout.cshtml` page that contains the javascript files:
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="/js/libs/jquery-ui-1.8.16.custom.min.js"></script> <script type="text/javascript" src="/js/libs/jquery.validate.min.js"></script> <script type="text/javascript" src="/js/libs/jquery.unobtrusive-ajax.min.js"></script> <script type="text/javascript" src="/js/libs/jquery.validate.unobtrusive.min.js"></script>
A `View` which contains a Modal popup, into which a separate `View` is loaded using jQuery Ajax. The dynamically loaded `View` contains a `Ajax.BeginForm()`, labels, fields, and validation messages. Nothing else.
Going with this, your ajax dynamically loaded view containing an `Ajax.BeginForm` will NOT do any client side validation.
To enable client side form validation on ASP.NET MVC 3 Views which have been dynamically loaded through Ajax is simple. Just add the following.
$.validator.unobtrusive.parse("#{form-id}");
Examples below:
$.ajax
({
url: "/{controller}/{action}/{id}",
type: "get",
success: function(data)
{
$.validator.unobtrusive.parse("#{form-id}");
}
});
Alternatively
$.get('/{controller}/{action}/{id}', function (data) { $.validator.unobtrusive.parse("#{form-id}"); });
I am always interested in hearing back from those who read my blog. Please leave a comment if you found this useful, want to suggest any changes to my code, or anything else! Thanks!