微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TagHelper 未呈现

如何解决TagHelper 未呈现

我有一个标签助手,它似乎工作了一半?
我可以在进程覆盖中设置一个断点,它会命中它。但是,htmlContent 的设置似乎没有显示

断点命中:

_ViewImports.cshtml

@using Gradebook      
@addTagHelper *,Gradebook
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

TextBoxInputHelper.cs

using System;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace Gradebook.TagHelpers
{
    // You may need to install the Microsoft.AspNetCore.Razor.Runtime package into your project
    [HtmlTargetElement("TextBoxInput")]
    public class TextBoxInputHelper : TagHelper
    {
        public string Id { get; set; }
        public string Text { get; set; }
        public bool Editable { get; set; }
        public string Name { get; set; }
        public string Label { get; set; } = "Control1";
        public string HelpLabel { get; set; }
        public bool required { get; set; }
        public string ErrorText { get; set; }
        public string ValidText { get; set; }

        [HtmlAttributeName("asp-for")]
        public ModelExpression Model { get; set; }

        public override void Process(TagHelperContext context,TagHelperOutput output)
        {
            output.TagName = "TextBoxInput";

            output.Attributes.SetAttribute("text",Text);

            var id = GetControlId();

            var requiredHtml = required ? "required" : "";
            var errorHtml = EmptyOrUse(ErrorText,$"<div class='invalid-Feedback'>{ErrorText}</div>");
            var validHtml = EmptyOrUse(ValidText,$"<div class='valid-Feedback'>{ValidText}</div>");
            

            var html = $@"
                <div class='col-md-4 mb-3'>
                    <label for='{id}'>{Label}</label>
                    <input type='text' class='form-control' id='{id}' placeholder='{HelpLabel}' value='{Text}' {requiredHtml}>
                    {errorHtml}                   
                    {validHtml}
                </div>
                ";

            var builder = new HtmlContentBuilder();
            builder.SetHtmlContent(html);


            output.Content.SetHtmlContent(builder);

        }

        private string EmptyOrUse(string value,string formatted) => string.IsNullOrWhiteSpace(value) ? string.Empty : formatted;

        private string GetControlId()
        {
            if (!string.IsNullOrWhiteSpace(Id)) return Id;

            return string.IsNullOrWhiteSpace(Model?.Name) 
                ? string.IsNullOrWhiteSpace(Name) 
                    ? "" 
                    : Name 
                : Model.Name;
        }
    }
}

使用标签的cshtml视图

<h2>title</h2>
<form>
    <TextBoxInput name="User.LastName" Text="@Model.User.LastName" />
</form>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。