【发布时间】:2016-05-03 09:16:07
【问题描述】:
我需要调用一些控制器/操作方法,或者至少调用我自己的帮助方法,这些方法将使用会话变量。我如何从 TagHelper 的 Process 方法中执行此操作
【问题讨论】:
标签: asp.net-core-mvc tag-helpers
我需要调用一些控制器/操作方法,或者至少调用我自己的帮助方法,这些方法将使用会话变量。我如何从 TagHelper 的 Process 方法中执行此操作
【问题讨论】:
标签: asp.net-core-mvc tag-helpers
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 做同样的事情。
【讨论】: