/// <summary>
        /// Generate index and add it to input elements.
        /// </summary>
        /// <param name="helper">HtmlHelper.</param>
        /// <param name="collectionName">Name of collection, must be same at posted action method.</param>
        /// <param name="generateHiddenIndexer">Generate hidden indexer input and write it to html if set to true.</param>
        /// <returns>IDisposable.</returns>
        internal static IDisposable BeginCollectionItem <TModel>(
            this HtmlHelper <TModel> helper,
            string collectionName,
            bool generateHiddenIndexer)
        {
            Queue <string> currentIds = GetCurrentIds(
                helper.ViewContext.HttpContext, collectionName);

            // If any id exist in the http context use it,
            // otherwise create new id.
            string itemIndex = currentIds.Count > 0
                ? currentIds.Dequeue()
                : Guid.NewGuid().ToString();

            // Generate and write hidden indexer to view if needed
            if (generateHiddenIndexer)
            {
                MvcHtmlString hiddenIndexer = helper.HiddenIndexerForModel(
                    collectionName,
                    itemIndex,
                    null);

                TextWriter writer = helper.ViewContext.Writer;
                writer.WriteLine(hiddenIndexer.ToHtmlString());
            }

            // Construct html prefix
            string htmlFieldPrefix = string.Format("{0}[{1}]", collectionName, itemIndex);

            // Begin field prefix scope
            return(helper.BeginHtmlFieldPrefixScope(htmlFieldPrefix));
        }
        public static IDisposable BeginCollectionItem(this HtmlHelper html, string collectionName)
        {
            Queue <string> idsToReuse = GetIdsToReuse(html.ViewContext.HttpContext, collectionName);
            string         str        = (idsToReuse.Count > 0) ? idsToReuse.Dequeue() : Guid.NewGuid().ToString();

            html.ViewContext.Writer.WriteLine(string.Format("<input type=\"hidden\" name=\"{0}.index\" autocomplete=\"off\" value=\"{1}\" />", collectionName, html.Encode(str)));
            return(html.BeginHtmlFieldPrefixScope(string.Format("{0}[{1}]", collectionName, str)));
        }
            public void Returns_IDisposable()
            {
                var viewContext = new ViewContext();
                var html        = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    result.ShouldImplement <IDisposable>();
                }
            }
Example #4
0
            public void Returns_IDisposable()
            {
                var viewContext = new ViewContext();
                var html        = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result,
                                Is.Not.Null
                                .And.InstanceOf <IDisposable>());
                }
            }
Example #5
0
            public void Wraps_HtmlHelper_ViewData_TemplateInfo()
            {
                var viewContext = new ViewContext();
                var html        = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result, Is.Not.Null);
                    Assert.That(result.TemplateInfo,
                                Is.Not.Null
                                .And.EqualTo(html.ViewData.TemplateInfo));
                }
            }
            public void Wraps_HtmlHelper_ViewData_TemplateInfo()
            {
                var viewContext = new ViewContext();
                var html        = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    // ReSharper disable PossibleNullReferenceException
                    result.TemplateInfo.ShouldNotBeNull();
                    // ReSharper restore PossibleNullReferenceException
                    result.TemplateInfo.ShouldEqual(html.ViewData.TemplateInfo);
                }
            }
            public void Restores_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenDisposed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var          viewContext     = new ViewContext();
                var          html            = new HtmlHelper(viewContext, new FakeViewDataContainer());

                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                }
                html.ViewData.TemplateInfo.HtmlFieldPrefix.ShouldEqual(prevFieldPrefix);
            }
Example #8
0
            public void Restores_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenDisposed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var          viewContext     = new ViewContext();
                var          html            = new HtmlHelper(viewContext, new FakeViewDataContainer());

                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result, Is.Not.Null);
                }
                Assert.That(html.ViewData.TemplateInfo.HtmlFieldPrefix, Is.EqualTo(prevFieldPrefix));
            }
            public void Changes_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenUsed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var          viewContext     = new ViewContext();
                var          html            = new HtmlHelper(viewContext, new FakeViewDataContainer());

                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    // ReSharper disable PossibleNullReferenceException
                    result.PreviousHtmlFieldPrefix.ShouldNotBeNull();
                    // ReSharper restore PossibleNullReferenceException
                    result.PreviousHtmlFieldPrefix.ShouldEqual(prevFieldPrefix);
                    html.ViewData.TemplateInfo.HtmlFieldPrefix.ShouldEqual(nextFieldPrefix);
                }
            }
            public void Wraps_HtmlHelper_ViewData_TemplateInfo()
            {
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result, Is.Not.Null);
                    Assert.That(result.TemplateInfo,
                                Is.Not.Null
                                  .And.EqualTo(html.ViewData.TemplateInfo));
                }
            }
            public void Returns_IDisposable()
            {
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result,
                                Is.Not.Null
                                  .And.InstanceOf<IDisposable>());
                }
            }
            public void Restores_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenDisposed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());
                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    Assert.That(result, Is.Not.Null);
                }
                Assert.That(html.ViewData.TemplateInfo.HtmlFieldPrefix, Is.EqualTo(prevFieldPrefix));
            }
            public void Wraps_HtmlHelper_ViewData_TemplateInfo()
            {
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    // ReSharper disable PossibleNullReferenceException
                    result.TemplateInfo.ShouldNotBeNull();
                    // ReSharper restore PossibleNullReferenceException
                    result.TemplateInfo.ShouldEqual(html.ViewData.TemplateInfo);

                }
            }
            public void Returns_IDisposable()
            {
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                using (var result = html.BeginHtmlFieldPrefixScope(string.Empty)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    result.ShouldImplement<IDisposable>();
                }
            }
            public void Restores_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenDisposed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());
                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                }
                html.ViewData.TemplateInfo.HtmlFieldPrefix.ShouldEqual(prevFieldPrefix);
            }
            public void Changes_HtmlHelper_ViewData_TemplateInfo_HtmlFieldPrefix_WhenUsed()
            {
                const string nextFieldPrefix = "InnerItems";
                const string prevFieldPrefix = "OuterItems";
                var viewContext = new ViewContext();
                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());
                html.ViewData.TemplateInfo.HtmlFieldPrefix = prevFieldPrefix;

                using (var result = html.BeginHtmlFieldPrefixScope(nextFieldPrefix)
                    as HtmlPrefixScopeExtensions.HtmlFieldPrefixScope)
                {
                    result.ShouldNotBeNull();
                    // ReSharper disable PossibleNullReferenceException
                    result.PreviousHtmlFieldPrefix.ShouldNotBeNull();
                    // ReSharper restore PossibleNullReferenceException
                    result.PreviousHtmlFieldPrefix.ShouldEqual(prevFieldPrefix);
                    html.ViewData.TemplateInfo.HtmlFieldPrefix.ShouldEqual(nextFieldPrefix);
                }
            }