namespace System.Web.Mvc.Html
{
// Summary:
// Represents support for HTML in an application.
public static class FormExtensions
{
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName);
...
}
}
I have noticed that 'this' object in front of the first parameter in BeginForm method doesn't seem to be accepted as a parameter. Looks like in real BeginForm methods functions as:
BeginForm(string actionName, string controllerName);
omitting the first parameter. But it actually receives that first parameter somehow in a hidden way. Can you please explain me how this structure works. I actually exploring MVC 4 internet Sample. Thank you.
This is how extension methods works in C#. The Extension Methods feature allowing you to extend existing types with custom methods.
The this [TypeName]
keyword in the context of method's parameters is the type
that you want to extend with your custom methods, the this
is used as a prefix, in your case, HtmlHelper
is the type
to extend and BeginForm
is the method which should extend it.
Take a look at this simple extention method for the string
type:
public static bool BiggerThan(this string theString, int minChars)
{
return (theString.Length > minChars);
}
You can easily use it on string
object:
var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
References:
Well-documented reference would be: How to: Implement and Call a Custom Extension Method (C# Programming Guide)
More particular reference about Extention Methods in ASP.NET MVC would be: How To Create Custom MVC Extension Methods