public void WritesExpectedCollectionIndexHiddenInput_WhenThereIsAnIndexInRequestData()
            {
                const string collectionName = "CollectionName";
                var index0 = Guid.NewGuid();
                var index1 = Guid.NewGuid();
                var indexes = string.Format("{0},{1}", index0, index1);
                var httpContext = new Mock<HttpContextBase>();
                var httpContextItems = new Dictionary<string, object>();
                httpContext.Setup(p => p.Items).Returns(httpContextItems);

                var httpRequest = new Mock<HttpRequestBase>();
                httpRequest.Setup(i => i[It.Is<string>(s => s == string.Format("{0}.index", collectionName))])
                    .Returns(indexes);
                httpContext.Setup(p => p.Request).Returns(httpRequest.Object);

                var viewContext = new ViewContext();
                var writer = new StringWriter();
                viewContext.Writer = writer;

                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());
                viewContext.HttpContext = httpContext.Object;

                using (var result = html.BeginCollectionItem(collectionName))
                {
                    Assert.That(result, Is.Not.Null);
                }

                var text = writer.ToString();
                Assert.That(text,
                            Is.Not.Null
                              .And.Not.Empty
                              .And.StringStarting(string.Format(@"<input type=""hidden"" name=""{0}.index"" autocomplete=""off"" value=""{1}"" />", collectionName, index0)));
            }
            public void WritesCollectionIndexHiddenInput_WhenThereIsNothingInRequestData()
            {
                const string collectionName = "CollectionName";
                var httpContext = new Mock<HttpContextBase>();
                var httpContextItems = new Dictionary<string, object>();
                httpContext.Setup(p => p.Items).Returns(httpContextItems);

                var httpRequest = new Mock<HttpRequestBase>();
                httpContext.Setup(p => p.Request).Returns(httpRequest.Object);

                var viewContext = new ViewContext();
                var writer = new StringWriter();
                viewContext.Writer = writer;

                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());
                viewContext.HttpContext = httpContext.Object;

                using (var result = html.BeginCollectionItem(collectionName))
                {
                    Assert.That(result, Is.Not.Null);
                }

                var text = writer.ToString();
                Assert.That(text,
                            Is.Not.Null
                              .And.Not.Empty
                              .And.StartsWith(string.Format(@"<input type=""hidden"" name=""{0}.index"" autocomplete=""off"" value=""", collectionName))
                              .And.Contains(@""" />"));
            }
            public void WritesCollectionIndexHiddenInput_WhenThereIsNothingInRequestData()
            {
                const string collectionName   = "CollectionName";
                var          httpContext      = new Mock <HttpContextBase>();
                var          httpContextItems = new Dictionary <string, object>();

                httpContext.Setup(p => p.Items).Returns(httpContextItems);

                var httpRequest = new Mock <HttpRequestBase>();

                httpContext.Setup(p => p.Request).Returns(httpRequest.Object);

                var viewContext = new ViewContext();
                var writer      = new StringWriter();

                viewContext.Writer = writer;

                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                viewContext.HttpContext = httpContext.Object;

                using (var result = html.BeginCollectionItem(collectionName))
                {
                    result.ShouldNotBeNull();
                }

                var text = writer.ToString();

                text.ShouldNotBeNull();
                text.ShouldNotBeEmpty();
                text.ShouldStartWith(string.Format(
                                         @"<input type=""hidden"" name=""{0}.index"" autocomplete=""off"" value=""",
                                         collectionName));
                text.ShouldContain(@""" />");
            }
Exemple #4
0
        public static async Task RenderPartialCollectionAsync <TModel, TProperty>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TProperty> > expression, string partialViewName)
            where TProperty : IEnumerable
        {
            var metadata = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
            var items    = (IEnumerable)metadata.Model ?? Enumerable.Empty <TModel>();

            foreach (var item in items)
            {
                using (htmlHelper.BeginCollectionItem(metadata.Metadata.PropertyName))
                {
                    await htmlHelper.RenderPartialAsync(partialViewName, item);
                }
            }
        }
            public void WritesExpectedCollectionIndexHiddenInput_WhenThereIsAnIndexInRequestData()
            {
                const string collectionName   = "CollectionName";
                var          index0           = Guid.NewGuid();
                var          index1           = Guid.NewGuid();
                var          indexes          = string.Format("{0},{1}", index0, index1);
                var          httpContext      = new Mock <HttpContextBase>();
                var          httpContextItems = new Dictionary <string, object>();

                httpContext.Setup(p => p.Items).Returns(httpContextItems);

                var httpRequest = new Mock <HttpRequestBase>();

                httpRequest.Setup(i => i[It.Is <string>(s => s == string.Format("{0}.index", collectionName))])
                .Returns(indexes);
                httpContext.Setup(p => p.Request).Returns(httpRequest.Object);

                var viewContext = new ViewContext();
                var writer      = new StringWriter();

                viewContext.Writer = writer;

                var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

                viewContext.HttpContext = httpContext.Object;

                using (var result = html.BeginCollectionItem(collectionName))
                {
                    result.ShouldNotBeNull();
                }

                var text = writer.ToString();

                text.ShouldNotBeNull();
                text.ShouldNotBeEmpty();
                text.ShouldStartWith(string.Format(
                                         @"<input type=""hidden"" name=""{0}.index"" autocomplete=""off"" value=""{1}"" />",
                                         collectionName, index0));
            }
 /// <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>
 /// <returns>IDisposable.</returns>
 public static IDisposable BeginCollectionItem <TModel>(
     this HtmlHelper <TModel> helper,
     string collectionName)
 {
     return(helper.BeginCollectionItem(collectionName, true));
 }