【问题标题】:Issue related to Adding Linq Variable in ViewState与在 ViewState 中添加 Linq 变量相关的问题
【发布时间】:2012-01-24 10:02:05
【问题描述】:

我有以下 LINQ 语句:

    string[] str = { "a", "ab", "abcd" };
    var s1 = from s in str.AsEnumerable()
             select s;
    ViewState.Add("str", s1);

我将s1 添加到ViewState 中,但出现以下错误:

类型 'System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.String, mscorlib,版本=2.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, 版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]' 在大会'System.Core,版本= 3.5.0.0,文化=中性, PublicKeyToken=b77a5c561934e089' 未标记为可序列化。

如何解决这个问题以及如何将 LINQ 变量添加到ViewState

【问题讨论】:

  • 在相关说明中,ViewState 用于存储状态,即下拉列表中的选定值、GirdView 的当前页面等,而不是用于放入数据。

标签: c# asp.net vb.net linq


【解决方案1】:

您不能直接执行此操作,因为您想要添加到ViewState 的任何内容都必须是可序列化的(标有SerializableAttribute),正如编译器告诉您的那样。 s1 的运行时类型是嵌套在System.Linq.Enumerable 中的泛型类,它没有该属性。

您可以做的一件事是在添加变量之前调用.ToArray()(或其他类似方法):

string[] str = { "a", "ab", "abcd" }; 
var s1 = from s in str.AsEnumerable() select s; 
ViewState.Add("str", s1.ToArray()); 

当然,这是没有意义的,因为你可以达到同样的效果

string[] str = { "a", "ab", "abcd" }; 
ViewState.Add("str", str); 

总体而言,从示例中不清楚您在此处要实现的目标。

【讨论】:

    【解决方案2】:

    您已经有一个数组,所以将str 存储在 ViewState 中。

    ViewState.Add("str", str); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多