Привязка состояния модели Asp.Net 5 TagHelper

Я пытаюсь создать собственный TagHelper, который привязывается к текущему ModelState, как

<input asp-for="this_part" />

Я хотел бы выполнить некоторую проверку ModelState из моего пользовательского класса TagHelper.

Пытался выполнить поиск в репозитории Github, но не смог точно определить это поведение. Кто-нибудь нашел способ сделать это?

Спасибо!


person mikal    schedule 15.05.2015    source источник


Ответы (1)


Я не уверен, что именно вы ищете, но DefaultHtmlGenerator делает что-то подобное для сообщений проверки.

Вы можете получить доступ к ModelState через ViewContext (пример адаптирован из ValidationMessageTagHelper.cs):

[TargetElement("span", Attributes = AttributeName)]
public class YourTagHelper : TagHelper
{
    private const string AttributeName = "your-for";

    [Activate]
    protected internal ViewContext ViewContext { get; set; }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        var modelState = ViewContext.ViewData.ModelState;
        // Your logic here
    }
}

Из ваших комментариев вы упомянули, что вам нужен intellisense для сопоставления со свойством модели. делает это с этим свойством:

[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
person Matt DeKrey    schedule 15.05.2015
comment
Спасибо. Это почти то, что я хочу, так как это помогает с проверкой состояния модели. Однако; это не приносит понимания модели при вводе атрибута for элемента html. Я получаю значение атрибута for, добавляя следующий код: [HtmlAttributeName(for)] public string AttributeFor { get; установлен; } , но без интеллекта. Может быть, это должен быть другой тип, чем строка? - person mikal; 15.05.2015
comment
Обновлен мой ответ для вас, чтобы ответить на ваш дополнительный вопрос. Это то, что вы ищете? - person Matt DeKrey; 15.05.2015
comment
Большой! Спасибо, Мэтт. - person mikal; 17.05.2015
comment
Согласно github.com/aspnet/Announcements/issues/28, [Активировать] можно уходит в бета-5. - person Matt DeKrey; 22.05.2015
comment
Начиная с бета-5, вы можете использовать [HtmlAttributeNotBound] [ViewContext] вместо [Activate]. - person bvpb; 13.10.2017