diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
index 97d8b627d6..b897eb580e 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
@@ -54,8 +54,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
///
///
- /// Does nothing unless contains a
- /// entry and that entry is a non-empty
+ /// Does nothing unless contains a
+ /// entry and that entry is a non-empty
/// instance. Also does nothing if the associated <option> is already
/// selected.
///
@@ -82,9 +82,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
// Is this element a child of a element the SelectTagHelper targeted?
object formDataEntry;
- ViewContext.FormContext.FormData.TryGetValue(
- SelectTagHelper.SelectedValuesFormDataKey,
- out formDataEntry);
+ context.Items.TryGetValue(typeof(SelectTagHelper), out formDataEntry);
// ... And did the SelectTagHelper determine any selected values?
var selectedValues = formDataEntry as ICollection;
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
index 1716b83c87..07697deb1d 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
@@ -27,6 +27,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
///
public override void Init(TagHelperContext context)
{
+ if (context == null)
+ {
+ throw new ArgumentNullException(nameof(context));
+ }
+
// Push the new FormContext.
ViewContext.FormContext = new FormContext
{
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
index 334747188a..19ec7e6d0d 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
@@ -21,16 +21,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
private const string ForAttributeName = "asp-for";
private const string ItemsAttributeName = "asp-items";
-
- ///
- /// Key used for selected values in .
- ///
- ///
- /// Value for this dictionary entry will either be null (indicating no has
- /// executed within this <form/>) or an instance. Elements of the
- /// collection are based on current .
- ///
- public static readonly string SelectedValuesFormDataKey = nameof(SelectTagHelper) + "-SelectedValues";
+ private bool _allowMultiple;
+ private IReadOnlyCollection _currentValues;
///
/// Creates a new .
@@ -69,6 +61,42 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
[HtmlAttributeName(ItemsAttributeName)]
public IEnumerable Items { get; set; }
+ ///
+ public override void Init(TagHelperContext context)
+ {
+ if (context == null)
+ {
+ throw new ArgumentNullException(nameof(context));
+ }
+
+ // Note null or empty For.Name is allowed because TemplateInfo.HtmlFieldPrefix may be sufficient.
+ // IHtmlGenerator will enforce name requirements.
+ if (For.Metadata == null)
+ {
+ throw new InvalidOperationException(Resources.FormatTagHelpers_NoProvidedMetadata(
+ "