Asp.net-Mvc

在剃刀視圖.net core 2中訪問會話變數

  • October 24, 2017

我正在嘗試在 .net core 2.0 項目的剃刀視圖中訪問會話儲存。@Session[“key”] 在 .net 2.0 視圖中是否有任何等價物?我還沒有找到如何執行此操作的工作範例 - 我使用我找到的方法收到此錯誤:

非靜態欄位、方法或屬性 HttpContext.Session 需要對象引用

看法:

@using Microsoft.AspNetCore.Http

[HTML button that needs to be hidden/shown based on trigger]

@section scripts {
<script>
   var filteredResults = '@HttpContext.Session.GetString("isFiltered")';
</script>
}

啟動.cs:

public void ConfigureServices(IServiceCollection services)
   {
       services.AddSession(options => {
           options.IdleTimeout = TimeSpan.FromMinutes(30);
       });

       services.AddMvc();

       // Added - uses IOptions<T> for your settings.
       // Added - replacement for the configuration manager
   }

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
   {
       //exception handler stuff
       //rewrite http to https
       //authentication
       app.UseSession();

       app.UseMvc(routes =>
       {
           routes.MapRoute(
               name: "default",
               template: "{controller=Home}/{action=Index}/{id?}");
       });
   }

您可以在 ASP.NET Core 2.0 中的視圖中進行依賴注入**:)**

IHttpContextAccessor您應該將實現注入您的視圖並使用它從中獲取HttpContextandSession對象。

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor HttpContextAccessor
<script>
  var isFiltered = '@HttpContextAccessor.HttpContext.Session.GetString("isFiltered")';
  alert(isFiltered);
</script>

假設您在類中有相關程式碼Startup.cs來啟用會話,這應該可以工作。

public void ConfigureServices(IServiceCollection services)
{
   services.AddSession(s => s.IdleTimeout = TimeSpan.FromMinutes(30));
   services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   app.UseSession(); 

   app.UseMvc(routes =>
   {
       routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}/{id?}");

   });
}

要在控制器中設置會話,您可以執行相同的操作。注入IHttpContextAccessor你的控制器並使用它

public class HomeController : Controller
{
  private readonly ISession session;
  public HomeController(IHttpContextAccessor httpContextAccessor)
  {
     this.session = httpContextAccessor.HttpContext.Session;
  }
  public IActionResult Index()
  {
    this.session.SetString("isFiltered","YES");
    return Content("This action method set session variable value");
  }
}

適當地使用 Session。如果您嘗試傳遞一些特定於目前頁面的數據(例如:是否過濾了網格數據,這對目前請求非常特定),則不應為此使用 session。考慮使用視圖模型並在其中具有可用於傳遞此數據的屬性。您始終可以根據需要通過視圖數據字典將這些值作為附加數據傳遞給部分視圖。

請記住,Http 是無狀態的。在向其中添加有狀態行為時,請確保您這樣做是出於正確的原因。

引用自:https://stackoverflow.com/questions/46921275