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(@""" />"); }
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)); }