The ASP.NET Razor series
Part 1 This article is going to help ASP.NET MVC developers translate their ASP.NET MVC view engine skills to Razor.
Part 2 Brian Mains examines functions and helpers in ASP.NET MVC 2 with the Razor engine.
Introduction
In ASP.NET MVC 2, the Html.Action helper method added the ability to invoke an action method. The contents of the action result rendered in the current HTTP response at the spot that it was declared. This was yet another way of rendering inline content, which it provided similar results as a partial view would, but varied in its implementation. For instance, a partial view renders with a given model, where the Html.Action method actually directly invokes an action using routing parameters. Both techniques provide additional ways to create reusable nuggets of user interface that could be repeated throughout.
The Razor engine offers something similar to this through the use of functions and helpers. Functions are properties or methods defined within a view that can be called throughout. A function can be thought of as creating a property or method in a code-behind page of a web form. Helpers, on the other hand, define a template that can be injected into the response stream at the point of its invocation. Helpers can be defined locally to the view or globally.
We're going to examine these capabilities and view how we can leverage them as developers.
Overview of Functions
Functions are properties or methods that are available throughout life of the view. A property on the view is accessible throughout the view, and its value is persisted like any other property value within the current request (but are lost between requests unless persisted in session, cache or some other state mechanism). In addition, methods also provide some service to the view, in that they accept work just like any other method in the .NET framework for any class. It can work with the input that's provided to it or with the base view (to a more limited extent in comparison to what was possible with web forms, since web forms has a complete API for the view).
If a method needs to render content to the view, it can do so in the traditional MVC approach using the IHtmlString interface. Under the scenes, MVC used an HTML string to represent markup rendered in the browser. This interface is the core representation of HTML content used by all HTML helpers in the ASP.NET MVC framework, and can be used here too to represent HTML content.
Functions in C#
Functions in C# are defined in a code block with a special functions keyword. Take a look of an example in Listing 1. Functions fully support the C# syntax; no new special conventions are used within the functions code block. Functions are defined directly in the view.
Listing 1: Defining Properties and Methods
As you can see, properties and methods work like they would if they were defined in the code behind class of a web form. The property wrapper can work with private variables, and methods can be defined returning HTML strings, integers, or any other types of data.
Functions in VB
Functions in VB also work using a code block with the @Functions keyword at the beginning, and an End Functions declaration at the end, similar to code blocks in VB. Functions have the same purpose in VB as they do in C#. Take a look at the VB equivalent of Listing 1, which appears in Listing 2.
Listing 2: Functions in VB
Notice that all of the conventions still rely on the standard VB syntax for blocks of code, with a beginning Functions statement, ending with an End Functions statement.
Overview of Helpers
Helpers are defined using the @helper special keyword. A helper specifies a name to its method, defines a list of parameters, and is called like a method, but functions quite differently as it has no return value. A helper directly renders its contents, which consists of client and server content that's rendered directly where the helper is called.
Helpers reside directly in the view that needs it (with the exception of Global Helpers discussed later). A helper is directly accessible within the view it's defined by calling it like any other method in the system.
Helpers in C#
Helpers in C# have similarities and differences in comparison with functions. For instance, both define a signature of a method; yet helpers do not define a return type, and define the client and server content directly within its body. Helpers also can define a variety of mixing client and server content, which is convenient in that a helper defines its template directly, instead of having to concatenate markup together like a helper would.
Listing 3: Helpers in C#
One of the harder concepts to understand is how flexible Razor is. Within the helper definition is functionality that acts similarly to a code block, supporting if/else and a variety of other constructs. Within this, template definitions by defining client-side markup is completely supported, as well as defining server-side statements within the client-side markup, all within a server-side helper. Crazy, isn't it?
Helpers in C# are invoked like a method, such as: @TextDecorator(“This is my text.").
Helpers in VB
Helpers in VB use VB syntax again to define the start and end of the helper code block. All templates rendered to the UI in VB must define an @ character at the beginning of the template. This is a VB only requirement. Other than the VB syntax and defining templates with an @, everything else in a helper is the same.
Listing 4: Helpers in VB
Helpers in VB are invoked like a method, such as: @TextDecorator(“This is my text.").
Global Helpers
Global helpers work the same as local helpers. Global helpers, instead of being defined in the view, reside in the App_Code folder. Global helpers follow the convention <View Name>.<Global Helper Name>. For instance, if a view GlobalHelpers.cshtml resides in the App_Code folder and has a helper named PageHeader, this helper could be invoked via the statement GlobalHelpers.PageHeader().
Global helpers provide an easy way to centralize UI nuggets to use throughout the entire application, and provide a consistent way to standardize application features like page or section titles, common data elements (such as a first and last name being rendered as "Last, First") and much, much more.
Conclusion
Functions and helpers is a feature to Razor that allows standardization throughout an application. Helpers and functions can achieve UI standardization and provide a reusable nugget that can be invoked throughout the application. Functions work similarly to a .NET function and return any type of data, whereas a helper defines the template inline, working similarly as a partial view, with the model passed as parameters.
The ASP.NET Razor series
Part 1 This article is going to help ASP.NET MVC developers translate their ASP.NET MVC view engine skills to Razor.
Part 2 Brian Mains examines functions and helpers in ASP.NET MVC 2 with the Razor engine.
About Brian Mains
 |
Brian Mains is an application developer consultant with Computer Aid Inc. He formerly worked with the Department of Public Welfare.
In both places of business, he developed both windows and web applications, small and large, using the latest .NET technologies. In addition, he had spent many hou...
This author has published 73 articles on DotNetSlackers. View other articles or the complete profile here.
|
You might also be interested in the following related blog posts
SQL SERVER - Function Property - Deterministic or Non-Deterministic
read more
Why I Love F#: Breaking Up Tuples
read more
Converting SQL to LINQ, Part 4: Functions (Bill Horst)
read more
|
|
Please login to rate or to leave a comment.