Example #1
0
    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);
        }
Example #3
0
    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);
    }
Example #4
0
    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);
 }