Functions inside page using Razor View Engine – ASP.NET MVC
- by hajan
As we already know, Razor is probably the best view engine for ASP.NET MVC so far. It keeps your code fluid and very expressive. Besides the other functionalities Razor has, it also supports writing local functions. If you want to write a function, you can’t just open new @{ } razor block and write it there… it won’t work. Instead, you should specify @functions { } so that inside the brackets you will write your own C#/VB.NET functions/methods. Lets see an example: 1. I have the following loop that prints data using Razor <ul> @{ int N = 10; for (int i = 1; i<=N; i++) { <li>Number @i</li> } } </ul> This code will print the numbers from 1 to 10: Number 1 Number 2 Number 3 Number 4 Number 5 Number 6 Number 7 Number 8 Number 9 Number 10 So, now lets write a function that will check if current number is even, if yes… add Even before Number word. Function in Razor @functions{ public bool isEven(int number) { return number % 2 == 0 ? true : false; } } The modified code which creates unordered list is: <ul> @{ int N = 10; for (int i = 1; i<=N; i++) { if (isEven(@i)) { <li>Even number @i</li> } else { <li>Number @i</li> } } } </ul> As you can see, in the modified code we use the isEven(@i) function to check if the current number is even or not… The result is: Number 1 Even number 2 Number 3 Even number 4 Number 5 Even number 6 Number 7 Even number 8 Number 9 Even number 10 So, the main point of this blog was to show how you can define your own functions inside page using Razor View Engine. Of course you can define multiple functions inside the same @functions { } defined razor statement. The complete code: @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>ASP.NET MVC - Razor View Engine :: Functions</title> </head> <body> <div> <ul> @{ int N = 10; for (int i = 1; i<=N; i++) { if (isEven(@i)) { <li>Even number @i</li> } else { <li>Number @i</li> } } } </ul> @functions{ public bool isEven(int number) { return number % 2 == 0 ? true : false; } } </div> </body> </html> Hope you like it. Regards, Hajan