diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
new file mode 100644
index 0000000000..c785a4c0a0
--- /dev/null
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
@@ -0,0 +1,132 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.AspNet.Mvc.Rendering;
+using Microsoft.AspNet.Razor.Runtime.TagHelpers;
+using Microsoft.AspNet.Razor.TagHelpers;
+
+namespace Microsoft.AspNet.Mvc.TagHelpers
+{
+ ///
+ /// implementation targeting <form> elements.
+ ///
+ [ContentBehavior(ContentBehavior.Append)]
+ public class FormTagHelper : TagHelper
+ {
+ private const string RouteAttributePrefix = "route-";
+
+ [Activate]
+ private ViewContext ViewContext { get; set; }
+
+ [Activate]
+ private IHtmlGenerator Generator { get; set; }
+
+ ///
+ /// The name of the action method.
+ ///
+ ///
+ /// If value contains a '/' this will do nothing.
+ ///
+ public string Action { get; set; }
+
+ ///
+ /// The name of the controller.
+ ///
+ public string Controller { get; set; }
+
+ ///
+ /// The HTTP method for processing the form, either GET or POST.
+ ///
+ public string Method { get; set; }
+
+ ///
+ /// Whether the anti-forgery token should be generated. Defaults to true if is not
+ /// a URL, false otherwise.
+ ///
+ [HtmlAttributeName("anti-forgery")]
+ public bool? AntiForgery { get; set; }
+
+ ///
+ /// Does nothing if contains a '/'.
+ public override void Process(TagHelperContext context, TagHelperOutput output)
+ {
+ bool antiForgeryDefault = true;
+
+ var routePrefixedAttributes = output.FindPrefixedAttributes(RouteAttributePrefix);
+
+ // If Action contains a '/' it means the user is attempting to use the FormTagHelper as a normal form.
+ if (Action != null && Action.Contains('/'))
+ {
+ if (Controller != null || routePrefixedAttributes.Any())
+ {
+ // We don't know how to generate a form action since a Controller attribute was also provided.
+ throw new InvalidOperationException(
+ Resources.FormatFormTagHelper_CannotDetermineAction(
+ "