Добавление тега по умолчанию ('asp -for') в пользовательский тег помощника - PullRequest
0 голосов
/ 19 февраля 2020

Пожалуйста, помогите мне добавить тег по умолчанию ('asp -for') в пользовательский тег помощника для контрольного списка. Я хочу использовать тег как по умолчанию.

Помощник тега:

 [HtmlTargetElement(Attributes = "asp-checklistbox, asp-modelname")]
public class CheckListBoxTagHelper : TagHelper
{
    [HtmlAttributeName("asp-checklistbox")]
    public IEnumerable<SelectListItem> Items { get; set; }

    [HtmlAttributeName("asp-modelname")]
    public string ModelName { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {


        var i = 0;
        foreach (var item in Items)
        {
            var selected = item.Selected ? @"checked=""checked""" : "";
            var disabled = item.Disabled ? @"disabled=""disabled""" : "";

            var html = $@"<label><input type=""checkbox"" {selected} {disabled} id=""{ModelName}_{i}__Selected"" name=""{ModelName}[{i}].Selected"" value=""true"" /> {item.Text}</label>";
            html += $@"<input type=""hidden"" id=""{ModelName}_{i}__Value"" name=""{ModelName}[{i}].Value"" value=""{item.Value}"">";
            html += $@"<input type=""hidden"" id=""{ModelName}_{i}__Text"" name=""{ModelName}[{i}].Text"" value=""{item.Text}"">";

            output.Content.AppendHtml(html);

            i++;
        }

        output.Attributes.SetAttribute("class", "th-chklstbx");
    }

}

Просмотр:

 <div asp-checklistbox="workTypeList" asp-modelname="workTypeId" asp-for="workTypeId"></div>

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Должен ли я изменить эту строку:

        public override void Process(TagHelperContext context, TagHelperOutput output)
    {


        var i = 0;
        foreach (var item in Items)
        {
            var selected = item.Selected ? @"checked=""checked""" : "";
            var disabled = item.Disabled ? @"disabled=""disabled""" : "";

            var html = $@"<label><input type=""checkbox"" {selected} {disabled} id=""{ModelName}_{i}__Selected"" name=""{ModelName}[{i}].Selected"" value=""true"" /> {item.Text}</label>";
            html += $@"<input type=""hidden"" id=""{ModelName}_{i}__Value"" name=""{ModelName}[{i}].Value"" value=""{item.Value}"">";
            html += $@"<input type=""hidden"" id=""{ModelName}_{i}__Text"" name=""{ModelName}[{i}].Text"" value=""{item.Text}"">";

            output.Content.AppendHtml(html);

            i++;
        }

        output.Attributes.SetAttribute("class", "th-chklstbx");
    }
0 голосов
/ 20 февраля 2020

Вы можете реализовать mimi c asp-for из стандартных помощников .

Пометьте свой помощник по тегам с помощью [HtmlTargetElement ("mychecklistbox", Attributes = "asp -for")] и добавьте в свой класс CheckListBoxTagHelper это свойство:

/// <summary>
/// An expression to be evaluated against the current model.
/// </summary>
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }

И используйте это свойство For для вывода HTML, вам нужно получить доступ к детализации Model, например Name. См. Стандартные помощники, которые его используют - например, LabelTagHelper или другие.

...