【问题标题】:Can we Access Complex object stored in session in Razor View .Net core 3.1我们可以在 Razor View .Net core 3.1 中访问存储在会话中的复杂对象吗
【发布时间】:2021-01-22 18:49:24
【问题描述】:

是否有可能在 .net core 3.1 中访问 .cshtml 中的复杂对象?我浏览了大多数网站都无法获得相同的任何信息。在服务器端,我发现我们可以这样做

public static class SessionExtensions
{
    public static T GetComplexData<T>(this ISession session, string key)
    {
        var data = session.GetString(key);
        if (data == null)
        {
            return default(T);
        }
        return JsonConvert.DeserializeObject<T>(data);
    }

    public static void SetComplexData(this ISession session, string key, object value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }
}

HttpContext.Session.SetComplexData("abcd", listOfObject);

我们如何访问这个listOfObject,它是剃刀视图会话中的列表?

问候, 基兰

【问题讨论】:

  • 您需要扩展方法(如您的代码中所述),当然在 razor 视图中,您仍然需要使用这些扩展方法(不会有字典式访问器)。
  • cshtml 是服务器渲染的,因此您可以使用相同的方法。但是我不建议在视图中访问它,而是在控制器中将其传递给 Model/ViewBag 中的视图。

标签: c# asp.net-mvc asp.net-core .net-core asp.net-core-3.1


【解决方案1】:

您可以在返回视图之前在服务器端代码中访问上述方法。这样你就可以创建一个 ViewModel 来存储你的复杂对象,并返回这个 ViewModel。现在您可以在 razor 视图中访问您的复杂对象。

前:

public IActionResult Index()
{
    var myComplexObject = HttpContext.Session.GetComplexData<ComplexObjectType>("abcd");

    var vM = new SomeViewModel
    {
        ComplexObject = myComplexObject
    };

    return View(vM);
}

然后在视图中,

@model ProjectName.ViewModels.SomeViewModel

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

// Access it like so:
Model.ComplexObject 

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多