public void Process_WithEmptyForName_Throws() { // Arrange var expectedMessage = "The name of an HTML field cannot be null or empty. Instead use methods " + "Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Editor or Microsoft.AspNetCore.Mvc.Rendering." + "IHtmlHelper`1.EditorFor with a non-empty htmlFieldName argument value."; var expectedTagName = "select"; var metadataProvider = new EmptyModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var model = "model-value"; var modelExplorer = metadataProvider.GetModelExplorerForType(typeof(string), model); var modelExpression = new ModelExpression(name: string.Empty, modelExplorer: modelExplorer); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var tagHelper = new SelectTagHelper(htmlGenerator) { For = modelExpression, ViewContext = viewContext, }; var context = new TagHelperContext(new TagHelperAttributeList(), new Dictionary <object, object>(), "test"); var output = new TagHelperOutput( expectedTagName, new TagHelperAttributeList(), (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent())); // Act & Assert ExceptionAssert.ThrowsArgument( () => tagHelper.Process(context, output), paramName: "expression", exceptionMessage: expectedMessage); }
public override void Process(TagHelperContext context, TagHelperOutput output) { string input = ""; string labelCss = "col-sm-4"; string controlCss = "col-sm-8"; var helper = new SelectTagHelper(Generator); helper.ViewContext = ViewContext; helper.For = Value; helper.Items = Items; helper.Init(context); helper.Process(context, output); using (var writer = new StringWriter()) { output.TagName = "select"; output.Attributes.Add("class", "form-control"); output.WriteTo(writer, HtmlEncoder.Default); input = writer.ToString(); } output.Attributes.Clear(); output.PostContent.Clear(); output.Content.Clear(); string req = (input.IndexOf("data-val-required") > -1) ? "<span class='required'>*</span>" : ""; var label = Label ?? Value?.Metadata?.DisplayName ?? Value?.Name ?? ""; var labelContent = $"<label for='{Value.Name}' class='{labelCss} col-form-label'>{req}{label}</label>"; var validateBuilder = Generator.GenerateValidationMessage( ViewContext, Value.ModelExplorer, Value.Name, message: null, tag: null, htmlAttributes: null); var divBuilder = new TagBuilder("div"); divBuilder.AddCssClass(controlCss); divBuilder.InnerHtml.AppendHtml(input); divBuilder.InnerHtml.AppendHtml(validateBuilder); output.TagName = "div"; output.Attributes.Add("class", "form-group row"); output.Content.AppendHtml(labelContent); output.Content.AppendHtml(divBuilder); }
public void Process_PassesNameThrough_EvenIfNullFor() { // Arrange var expectedAttributeValue = "-expression-"; var expectedTagName = "span"; var selectList = Array.Empty <SelectListItem>(); var generator = new Mock <IHtmlGenerator>(MockBehavior.Strict); generator .Setup(gen => gen.GenerateGroupsAndOptions(/* optionLabel: */ null, selectList)) .Returns(HtmlString.Empty) .Verifiable(); var metadataProvider = new EmptyModelMetadataProvider(); var viewContext = TestableHtmlGenerator.GetViewContext( model: null, htmlGenerator: generator.Object, metadataProvider: metadataProvider); var tagHelper = new SelectTagHelper(generator.Object) { Items = selectList, Name = expectedAttributeValue, ViewContext = viewContext, }; var attributes = new TagHelperAttributeList { { "name", expectedAttributeValue }, }; var tagHelperContext = new TagHelperContext(attributes, new Dictionary <object, object>(), "test"); var output = new TagHelperOutput( expectedTagName, new TagHelperAttributeList(), (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent())); // Act tagHelper.Process(tagHelperContext, output); // Assert generator.VerifyAll(); Assert.Equal(expectedTagName, output.TagName); var attribute = Assert.Single(output.Attributes); Assert.Equal("name", attribute.Name); Assert.Equal(expectedAttributeValue, attribute.Value); }
public void Process_WithEmptyForName_DoesNotThrow_WithName() { // Arrange var expectedAttributeValue = "-expression-"; var expectedTagName = "select"; var metadataProvider = new EmptyModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var model = "model-value"; var modelExplorer = metadataProvider.GetModelExplorerForType(typeof(string), model); var modelExpression = new ModelExpression(name: string.Empty, modelExplorer: modelExplorer); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var tagHelper = new SelectTagHelper(htmlGenerator) { For = modelExpression, Name = expectedAttributeValue, ViewContext = viewContext, }; var attributes = new TagHelperAttributeList { { "name", expectedAttributeValue }, }; var context = new TagHelperContext(attributes, new Dictionary <object, object>(), "test"); var output = new TagHelperOutput( expectedTagName, new TagHelperAttributeList(), (_, __) => Task.FromResult <TagHelperContent>(new DefaultTagHelperContent())); // Act tagHelper.Process(context, output); // Assert Assert.Equal(expectedTagName, output.TagName); Assert.False(output.IsContentModified); var attribute = Assert.Single(output.Attributes); Assert.Equal("name", attribute.Name); Assert.Equal(expectedAttributeValue, attribute.Value); }
/// <summary> /// 呈现输出。 /// </summary> /// <param name="context">标签上下文。</param> /// <param name="output">输出上下文。</param> public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "select"; _selectTagHelper.Process(context, output); }