ASP.NET MVC 4 includes Ajax functionalities based on jQuery javascript library. Most of the Ajax features in the framework build on or extend features in jQuery
In this post we will implement an asynchronous request form with validation
This is the Chemical model in our Application
We have imported the next SQL schema (table and stored procedure)
The code to release the search of chemical elements is the next
And in the Elements class the implementation of the SearchElement method is this
The code in the View to make the process work asynchronously, is the next
This code renders an html form with the next marks
The information about how to perform the AJAX request is contained in the DOM, and it is released by the jquery.unobtrusive-ajax.js code
The PartialView for Elements is strongly typed and renders a table in a loop for each element
The validation rules are specified in the model, so the code in the view
will renders the information into these data dash attributes
The Ajax request, and validation are implemented inside the jQuery scripts
In this post we will implement an asynchronous request form with validation
This is the Chemical model in our Application
public class ChemicalElement
{
public int IdElement { get; set; }
[DisplayName("Name")]
[Required]
public string Name { get; set; }
[DisplayName("Latin name")]
[Required]
public string LatinName { get; set; }
[DisplayName("Symbol")]
[Required]
[RegularExpression(@"\b[a-zA-Z]{1,3}\b")]
public string Symbol { get; set; }
}
We have imported the next SQL schema (table and stored procedure)
The code to release the search of chemical elements is the next
public PartialViewResult SearchChemicalElements(string search)
{
var elementsModel = SearchElementsModel(search);
return PartialView("Elements", elementsModel);
}
private IEnumerable<ChemicalElement> SearchElementsModel(string search)
{
var allElements = Elements.SearchElements(search);
return allElements;
}
And in the Elements class the implementation of the SearchElement method is this
public static IEnumerable<ChemicalElement> SearchElements(string search)
{
using (CHEMICALSEntities context = new CHEMICALSEntities())
{
ObjectResult<SearchElementsBySymbol_Result> matchElements =
context.SearchElementsBySymbol("%" + search + "%");
foreach (var element in matchElements)
yield return new ChemicalElement()
{
IdElement = element.IdElement,
Name = element.Name,
LatinName = element.LatinName,
Symbol = element.Symbol
};
}
}
The code in the View to make the process work asynchronously, is the next
@using (Ajax.BeginForm("SearchChemicalElements", "Chemical", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
LoadingElementId = "preloader",
UpdateTargetId = "searchResults",
}))
This code renders an html form with the next marks
The information about how to perform the AJAX request is contained in the DOM, and it is released by the jquery.unobtrusive-ajax.js code
The PartialView for Elements is strongly typed and renders a table in a loop for each element
The validation rules are specified in the model, so the code in the view
@Html.TextBoxFor(m => m.Symbol, new { Name = "search"})
will renders the information into these data dash attributes
data-val="true"
data-val-regex="The field Symbol must match the regular expression '\b[a-zA-Z]{1,3}\b'."
data-val-regex-pattern="\b[a-zA-Z]{1,3}\b"
data-val-required="The field Symbol is required."
id="Symbol" name="search"
The Ajax request, and validation are implemented inside the jQuery scripts
@section scripts {
<script type="text/javascript" src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}