Mariusz Jamro Mariusz Jamro - 3 months ago 61
C# Question

How can I inject ViewDataDictionary or ModelStateDictionary into TagHelper in ASP.NET Core

In razor views I can access model state object:

@ViewData.ModelState


How can i inject and access
ViewData
or
ModelState
objects in razor
TagHelper
? I tried the following, however the
ViewData
and
ModelState
are always null:

public class ModelStateTagHelper : TagHelper
{
public ViewDataDictionary ViewData { get; set; }
public ModelStateDictionary ModelState { get; set; }

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

Answer

You can inject 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;
        }
    }