Как я могу ввести ViewDataDictionary или ModelStateDictionary в TagHelper?
В представлении бритвы я могу получить доступ к объекту состояния модели:
@ViewData.ModelState
Как я могу ввести и получить доступ ViewData
или же ModelState
объекты в бритве TagHelper
? Я попробовал следующее, однако ViewData
а также ModelState
всегда нулевые:
public class ModelStateTagHelper : TagHelper
{
public ViewDataDictionary ViewData { get; set; }
public ModelStateDictionary ModelState { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
}
}
2 ответа
Решение
Вы можете ввести IActionContextAccessor
:
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
}
public class ModelStateTagHelper : TagHelper
{
public readonly IActionContextAccessor _accessor;
public ModelStateTagHelper(IActionContextAccessor accessor)
{
_accessor = accessor;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var modelState = _accessor.ActionContext.ModelState;
}
}
Для тех, кто ищет ViewData
а не ModelState
Вы можете добавить ViewContext
на ваш TagHelper
,
public class EmailTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var hasACertainKey = this.ViewContext.ViewData.ContainsKey("ACertainKey");
}
}