gpt4 book ai didi

c# - 在 ASPX 脚本 block 中声明一个类然后将其存储在 session 中

转载 作者:行者123 更新时间:2023-11-30 18:40:27 25 4
gpt4 key购买 nike

我在做一些我认为应该非常可行的事情时遇到了困难。也许有人可以告诉我我错过了什么。我被限制在服务器端脚本 block 中将我的 C# 代码添加到我的 .aspx 页面(没有代码隐藏)。我想在 ASPX 页面(这将是一个嵌套类)上定义一个新类(同样不创建任何其他文件),然后将这些对象的列表存储在 Session 中,以在回发之间和用户花费一些时间后保留其他页面,然后返回到相关页面。这是我的代码...

    <script language="C#" runat="Server">
protected List<Part> AssignmentSearchResults
{
get
{
if (Session["SearchResults"] == null)
Session["SearchResults"] = new List<Part>();
return (List<Part>)Session["SearchResults"];
}
set
{
Session["SearchResults"] = value;
}
}

public class Part
{
public string Id { get; set; }
public string Description { get; set; }
public string Type { get; set; }
public bool Selected { get; set; }
}

</script>
(html goes here)

如果我使用 List,它工作得很好,但是当我使用我的自定义类时,它就不行了。这是我得到的错误...

[A]System.Collections.Generic.List1[ASP.pub_usercontrols_exeplanning_resources_ascx+Part] cannot be cast to [B]System.Collections.Generic.List1[ASP.pub_usercontrols_exeplanning_resources_ascx+Part]. Type A originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Type B originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.

...也许您会注意到两者(A 和 B)完全相同。有任何想法吗?非常感谢您的帮助。

最佳答案

我不知道是什么导致了你的问题,但我有一个解决方案。既然session对象一直在被序列化,那为什么不先序列化对象/对象列表,然后把它放到Session[]中呢?

即:

List<Part> parts = new List<Part>();
//... populate parts
XmlSerializer xs = new XmlSerializer(typeof(List<Part>));

MemoryStream ms = new MemoryStream();
xs.Serialize(ms, parts);

// Rewind the stream and write it to session as XML

ms.Seek(0, SeekOrigin.Begin);
Session["XMLResults"] = Encoding.ASCII.GetString(ms.ToArray());

//Get memory stream from session
ms = new MemoryStream();
byte[] bData = Encoding.ASCII.GetBytes(Session["XMLResults"].ToString());
ms.Write(bData, 0, bData.Length);

// Hydrate parts list from a memory stream
ms.Seek(0, SeekOrigin.Begin);
parts = (List<Part>)xs.Deserialize(ms);

关于c# - 在 ASPX 脚本 block 中声明一个类然后将其存储在 session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com