2011-12-20 3 views
0

Я следующий LINQ заявление:Проблема связана с Добавление Linq переменной в ViewState

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

я добавил s1 в ViewState и я получил следующее сообщение об ошибке:

Type 'System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

Как я могу решить эту проблему и как Можно ли добавить переменную LINQ в ViewState?

+1

В соответствующей заметке ViewState предназначен для сохранения состояния, то есть выбранного значения на выпадающей, текущей странице GirdView и т. Д., А не для ввода данных. –

ответ

5

Вы не можете сделать это напрямую, потому что все, что вы хотите добавить в 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); 

В целом, на примере не ясно, чего вы пытаетесь достичь здесь.

1

У вас уже есть массив, поэтому магазин str в ViewState.

ViewState.Add("str", str); 
Смежные вопросы