Click here to Skip to main content
Licence CPOL
First Posted 11 Jul 2011
Views 14,245
Downloads 1,102
Bookmarked 29 times

Create Custom Controls in MVC3

By | 29 Jul 2011 | Article
This article demonstrates how we can create Custom Controls in MVC3

Introduction

In this article, I am going to share my experience in creating custom controls in ASP.NET MVC3 Razor. At the end of the article, you will learn something new on how to create custom controls and its advantages.

This is part one of two that I want to share with you.

Background

This article is meant for an intermediate / experienced programmer who has some experience in developing applications in MVC3 Razor/Aspx.

There are two ways of creating Custom Controls:

  1. With Extension methods
  2. Creating a cshtml file with all the logic. Either we can code with @helper or Razor and/or Html. Then pre-compile it to generate a DLL.

Create Controls with Extension Methods

These controls are written from scratch extensively using code. Here’s one sample example of how you can create a custom control which outputs a Video tag for HTML5. You have to create a ClassLibrary project. Create a static class say ViedoExtension and copy the below mentioned code.

If your browser is supporting HTML5, then you should be able to see a video tag, else you will see a message ‘Your browser doesn't support video tags.

public static class VideoExtension
{
        public static MvcHtmlString Video
		(this HtmlHelper html, string src, bool showControls)
        {
            string url = UrlHelper.GenerateContentUrl(src, html.ViewContext.HttpContext);
            var tag = new TagBuilder("video") 
              {InnerHtml = "Your browser doesn't support video tags."};

            tag.MergeAttribute("src", url);
            if(showControls)
            // Show Play/Pause buttons
                tag.MergeAttribute("controls", "controls"); 
            return MvcHtmlString.Create(tag.ToString());
        }
}

Creating a Custom Control with the Help of *.cshtml

Your cshtml either can have @helper or just a code with razor syntax. Create a Class library project and a new razor cshtml file. Copy paste the below mentioned snippet for generating the list with <li>.

@helper WriteList(string[] items) 
{
     @foreach (var s in items)<ul>{
            <li> 
               @s  
            </li> 
}      </ul>}   

There is no way to reuse this cshtml unless you precompile this code to generate a DLL. We will next see how to re-compile the above one.

  1. Go to the VS Extension Gallery, it is under Tool in VS. Then install the Razor Single File Generator.

    RazorToCode.png

  2. Under the cshtml file -> properties, set the Build Action to Content, and set the custom tool to MVCRazorClassGenerator.
  3. Compile the Class library so that you will now see the *.cs file for the corresponding cshtml file under cshtml file.
  4. Do some minor tweaks. Say renaming the class name of *.cs file or extracting the core logic to a method.
  5. @{
        ViewBag.Title = "Sample code to demonstrate the usage of Custom Controls";
        var obj = new WriteToList();
        var str = new string[2]
                           {
                               "Test",
                                "Ranjan"
                           };
    } 
    @using (Html.BeginForm())
    {            
       @obj.WriteList(str)         
    }

Points of Interest

It’s very interesting and fun to create a custom control. I feel the second approach is really faster than the first one as we are more comfortable in writing cshtml. Wait for part two that I will be sharing with you soon.

Guys do-not forget to vote for me. I surely need your feedback and inputs.  

Advantages of Creating a Custom Control

Custom code in a library project makes it easy to produce a binary that can be used in multiple projects without having to keep source files around.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Ranjan.D

Web Developer

India India

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionModels PinmemberMauxel0:38 16 Apr '12  
QuestionHow To use server control like @HTML.Textbox Pinmembernageshwa23:55 18 Jan '12  
QuestionTypo error PinmemberJamil Hallal1:49 18 Jul '11  
AnswerRe: Typo error PinmemberRanjan.D5:00 22 Jan '12  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120528.1 | Last Updated 30 Jul 2011
Article Copyright 2011 by Ranjan.D
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid