Мне нужно либо вызвать какой-либо метод контроллера/действия, либо, по крайней мере, вызвать мои собственные вспомогательные методы, которые будут использовать переменную сеанса. Как это сделать из метода Process TagHelper
Как получить доступ к сеансу и другому веб-контексту из класса MVC 6 TagHelper?
Ответы (1)
ViewContextAttribute
предоставит доступ к контексту (объектам и т. д.), который также доступен для вашего представления внутри вашего помощника по тегам.
Внутри вспомогательного класса тега добавьте:
[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, я не хотел обременять своих пользователей настройкой этого DI в их startup.cs.
Итак, я добавил это в метод Process() родительского вспомогательного тега:
TempData.Set("Test", "Passed the test!");
... а затем добавил это в дочерний помощник по тегам:
object result;
if (TempData.TryGetValue("Test", out result))
{
string success = result.ToString();
}
... и это сработало. Я использовал TempData, но это зависит от сеанса. Вы можете сделать то же самое с сеансом.