ASP. Net Core 3.1 MVC атрибут условия вспомогательной функции настраиваемого тега всегда равен false - PullRequest
1 голос
/ 16 июня 2020

Я создал помощник тега для выбранных элементов в своем веб-приложении:

[HtmlTargetElement( "select", Attributes = nameof( AutoPostBack ) )]
    public class AutoPostBackTagHelper : TagHelper
    {
        public bool AutoPostBack { get; set; }

        public override void Process( TagHelperContext context, TagHelperOutput output )
        {
            // AutoPostBack is always false
            if ( AutoPostBack )
            {
                output.Attributes.SetAttribute( "onchange", "this.form.submit();" );
            }

            // here I could extract the attribute
            Microsoft.AspNetCore.Html.HtmlString x =
                (Microsoft.AspNetCore.Html.HtmlString)context.AllAttributes[nameof( AutoPostBack )].Value;
            // and this is working
            if ( x.Value == "true" )
            {
                output.Attributes.SetAttribute( "onchange", "this.form.submit();" );
            }
        }
    }

Вот пример использования в моем представлении:

<select asp-for="MessageType"
    asp-items="Html.GetEnumSelectList<MyViewModels.MessageType>()"
    class="form-control" AutoPostBack="true">
</select>

Я хочу использовать это условие как оно рекомендуется через определенный атрибут AutoPostBack . Почему атрибут всегда ложный?

1 Ответ

1 голос
/ 16 июня 2020

Чтобы получить набор параметров AutoPostBack, вам необходимо передать его помощнику тега в 'kebab-case'.

См. Комментарий в этом примере: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring?view=aspnetcore-3.1#setattribute -and-setcontent

Думаю, если вы воспользуетесь этим, он будет работать

<select auto-post-back="true"></select>
[HtmlTargetElement("select", Attributes = "auto-post-back")]
    public class AutoPostBackTagHelper : TagHelper
    {
        public bool AutoPostBack { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            // Will hopefully work :-)
            if (AutoPostBack)
            {
                output.Attributes.SetAttribute("onchange", "this.form.submit();");
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...