Asp.net core mvc 如何从MVC6TagHelper类访问会话和其他webcontext?

Asp.net core mvc 如何从MVC6TagHelper类访问会话和其他webcontext?,asp.net-core-mvc,tag-helpers,Asp.net Core Mvc,Tag Helpers,我需要调用一些控制器/操作方法,或者至少调用我自己的助手方法,这些方法将使用会话变量。如何从TagHelper的Process方法中执行此操作通过ViewContextAttribute可以访问Tag Helper中的上下文(对象等) 在标记帮助器类中,添加: [ViewContext] public ViewContext ViewContext { get; set; } 。。。然后,您可以创建属性,以便在标记帮助器的其余部分中使用,以访问特定资源,如: protected HttpReq

我需要调用一些控制器/操作方法,或者至少调用我自己的助手方法,这些方法将使用会话变量。如何从TagHelper的Process方法中执行此操作通过
ViewContextAttribute
可以访问Tag Helper中的上下文(对象等)

在标记帮助器类中,添加:

[ViewContext]
public ViewContext ViewContext { get; set; }
。。。然后,您可以创建属性,以便在标记帮助器的其余部分中使用,以访问特定资源,如:

protected HttpRequest Request => ViewContext.HttpContext.Request;
protected HttpResponse Response => ViewContext.HttpContext.Response;
protected ISession Session => ViewContext.HttpContext.Session;
protected ITempDataDictionary TempData => ViewContext.TempData;
然后从流程方法中使用它们:

在我的例子中,我需要在父(封闭)标记帮助器和子(封闭)标记帮助器之间传递值。我本可以创建一个自定义对象并将其注入两者,但由于我很可能会将其放入NuGet包中,因此我不想让我的用户在他们的startup.cs中设置此DI

因此,我在父标记帮助器的Process()方法中添加了以下内容:

TempData.Set("Test", "Passed the test!");
object result;
if (TempData.TryGetValue("Test", out result))
{
  string success = result.ToString();
}
。。。然后在子标记帮助器中添加以下内容:

TempData.Set("Test", "Passed the test!");
object result;
if (TempData.TryGetValue("Test", out result))
{
  string success = result.ToString();
}

。。。它成功了。我使用了TempData,但它取决于会话。您可以对会话执行相同的操作。

以下是一个线程,其中包含用于注入上下文特定类型的其他属性列表: