One of the most important purpose of server controls in ASP.NET —favoring HTMLlevel
code reuse. ASP.NET MVC doesn’t have the server controls but it have. To achieve these features in MVC, It needs be built programmatically based on dynamically discovered data. What’s a technology equivalent to server?
controls in ASP.NET MVC? Here comes the sense of HTML helpers.
HTML helpers certainly are not the same as server controls, but they are the closest you can get to HTML-level code reuse with a view engine. An HTML helper method has no view state, no postbacks, and no page life cycle and events. HTML helpers are simple HTML factories. Technically, an HTML helper is an extension method defined on a system class—the HtmlHelper class—that outputs an HTML string based on the provided input data. Internally, in fact, an HTML helper simply accumulates text into a StringBuilder object.
HTML helpers can be classified into three categories.
1. Basic HTML Helpers
ASP.NET MVC framework has some HTML helpers for ready to use. Following are the list of basic HTML Helpers.
HTML Helpers
Methods |
Type |
Description |
BeginForm, BeginRouteForm |
From |
It Returns an internal object that represents an HTML form which system uses to render the <form> tag |
EndForm |
From |
A void method, closes the pending </form > tag |
CheckBox, CheckBoxFor |
Input |
Returns the HTML string for a check box input element |
Hidden, HiddenFor |
Input |
Returns the HTML string for a hidden input element/td>
|
Password, PasswordFor |
Input |
Returns the HTML string for a password input element |
RadioButton, RadioButtonFor |
Input |
Returns the HTML string for a radio button input element |
TextBox, TextBoxFor |
Input |
Returns the HTML string for a text input element |
Label, LabelFor |
Input |
Returns the HTML string for an HTML label element |
ActionLink, RouteLink |
Link |
Returns the HTML string for an HTML link |
DropDownList, DropDownListFor |
List |
Returns the HTML string for a drop-down list |
ListBox, ListboxFor |
List |
Returns the HTML string for a list box |
TextArea, TextAreaFor |
TextArea |
Returns the HTML string for a text area |
Partial |
Partial |
Returns the HTML string incorporated in the specified user control |
RenderPartial |
Partial |
Writes the HTML string incorporated in the specified user control to the
output stream
|
ValidationMessage, ValidationMessageFor |
Validation |
Returns the HTML string for a validation message |
ValidationSummary |
Validation |
Returns the HTML string for a validation summary message |
As an example, let’s see how to use an HTML helper to create a text box with programmatically
determined text. You place the call in a code block if you’re using the ASPX view engine:
<%: Html.TextBox("TextBox1", ViewBag.DefaultText) %>
Or you prefix the call with the @ symbol if you’re using Razor. (I’ll say more about Razor in a
moment.)
@Html.TextBox("TextBox1", ViewBag.DefaultText)
2. Templated HTML Helpers:
Templated HTML helpers aim to make the display and editing of data quick to write and independent
from too many HTML and CSS details How would you display or edit this data?
Writing HTML forms over and over again leads to repetitive, boring, and therefore error-prone
code. Templated helpers take an object, read the value of properties, and decide how to best render
those values. By decorating the view-model objects with special attributes, you provide the helper
further guidance regarding user-interface hints and validation.
With templated helpers, you are not losing control over the user interface; more simply, attributes
in the model establish a number of conventions and save you from a number of repetitive tasks.
Templated helpers actually come with three overloads. Using the Display helper as an example,
you have the following more specific helpers: Display, DisplayFor, and DisplayForModel. There’s no
functional difference between Display, DisplayFor, and DisplayForModel. They differ only in terms of
the input parameters they can manage. There are another flavor for each Display helpers known as Editor helpers
Examples:
The Display helper accepts a string indicating the name of the property in the ViewData dictionary, or
on the view-model object, to be processed:
<%= Html.Display("FirstName") %>
The Editor helper for above Display can be write as
<%= Html.EditorFor(person => person.FirstName) %>
The DisplayFor helper accepts a lambda expression and requires that a view-model object be
passed to the view:
<%= Html.DisplayFor(model => model.FirstName) %>
Finally, DisplayForModel is a shortcut for DisplayFor getting the expression model => model:
<%= Html.DisplayForModel() %>
3. Custom Helpers
The native set of HTML helper methods is definitely a great help, but it’s probably insufficient for
many real-world applications. Native helpers, in fact, cover only the markup of basic HTML elements.
In this regard, HTML helpers are significantly different from server controls because they completely
lack abstraction over HTML. Extending the set of HTML helpers is easy, however. All that is required
is an extension method for the HtmlHelper class or for the AjaxHelper class if you’re interested in
creating an HTML factory that does some Ajax work.
The helper has up to four parameters, three of which are optional parameters. It takes the original
text and its null replacement, plus a format string to embellish the text in both cases.
public static class OptionalTextHelpers
{
public static MvcHtmlString OptionalText(this HtmlHelper helper,
String text,
String format="{0}",
String alternateText="",
String alternateFormat="{0}")
{
var actualText = text;
var actualFormat = format;
if (String.IsNullOrEmpty(actualText))
{
actualText = alternateText;
actualFormat = alternateFormat;
}
return MvcHtmlString.Create(String.Format(actualFormat, actualText));
}
}