【问题标题】:How to get access to session and other webcontext from MVC 6 TagHelper class?如何从 MVC 6 TagHelper 类访问会话和其他网络上下文?
【发布时间】:2016-05-03 09:16:07
【问题描述】:

我需要调用一些控制器/操作方法,或者至少调用我自己的帮助方法,这些方法将使用会话变量。我如何从 TagHelper 的 Process 方法中执行此操作

【问题讨论】:

    标签: asp.net-core-mvc tag-helpers


    【解决方案1】:

    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;
    

    然后在您的 Process 方法中使用它们:

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

    所以,我在父 Tag Helper 的 Process() 方法中添加了这个:

    TempData.Set("Test", "Passed the test!");
    

    ... 然后在子 Tag Helper 中添加这个:

    object result;
    if (TempData.TryGetValue("Test", out result))
    {
      string success = result.ToString();
    }
    

    ... 它奏效了。我使用了 TempData,但它取决于 Session。你可以用 Session 做同样的事情。

    【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-11-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多