Search code examples
c#asp.net-coreasp.net-core-tag-helpers

How can I inject ViewDataDictionary or ModelStateDictionary into TagHelper?


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)
    {
    }
}

Solution

  • 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;
            }
        }