2011-01-25 2 views
0

Я придерживался условия, когда мне нужно делиться значениями между страницами. Я хочу поделиться ценностью с Codebehind с помощью небольшого или отсутствующего javascript. У меня уже есть вопрос здесь о SO, но с использованием JS. Тем не менее, у меня не было никакого результата, поэтому я спрашиваю другой подход.Могу ли я передать объект .net через querystring?

Так что я хочу знать, могу ли я передать любой объект .net в строке запроса. SO, чтобы я мог распаковать его на другом конце удобно.

Update

Или есть подход JavaScript, пропусканием его окна модальный диалог. или что-то типа того.

Что я делаю

Что я делаю то, что на мой родитель загрузки страницы. Я извлекаю свойства из моего класса, который имеет значения, полученные из db. и положите его в Session["mySession"]. Что-то вроде этого.

Session["mySession"] = myClass.myStatus which is List<int>; 

Теперь на одном из моих событий, которые показывают событие клика с клиентской стороны, я открываю всплывающее окно. и на загрузку страницы, извлечение списка и заполнение списка флажков на дочерней странице.

Теперь пользователь здесь может изменить свой выбор и закрыть эту страницу. Закрыть выполняется с помощью кнопки «Сохранить», на которой я повторяю проверенные элементы и снова отправляю их в сеанс [«mySession»].

Но проблема здесь, когда я снова нажимаю на переключатель для просмотра обновленных значений, отображается предыдущий. То есть, если мое общее количество списков равно 3 из db, а после модификации оно равно 1. После повторного открытия оно все еще отображает 3 вместо 1.

+0

Насколько сложным является объект? – ChaosPandion

+0

Мне нужно передать Список

ответ

3

Я бы так что-то вроде этого.

var stringNumbers = intNumbers.Select(i => i.ToString()).ToArray(); 
var qsValue = string.Join(",", stringNumbers); 

Request.Redirect("Page.aspx?numbers=" + sqValue); 

Имейте в виду, что если числа слишком велики, строка запроса является не лучшим вариантом. Также помните, что каждый может видеть строку запроса, поэтому, если эти данные должны быть защищены, не используйте строку запроса. Имейте в виду предложения других плакатов.

Примечание

Если вы используете.NET 4 вы можете упростить приведенный выше код:

var qsValue = string.Join(",", intNumbers); 
+0

+1 избили меня. замечательное решение – naveen

+0

Спасибо, то же самое решение отразилось в моем сознании. Но, несмотря на ограничение, я избегал. Поскольку мой список будет иметь максимальные 5-10 значений, поэтому я думаю, что он будет работать. –

4

Да, вы могли бы, но вам придется сериализовать это значение, чтобы он может быть закодирован как строка. Я думаю, что гораздо лучший подход был бы к put the object in session, а не по URL-адресу.

+0

Я принял подход к занятиям, но для меня это стало злым. Значения сеанса не обновляются должным образом и каждый раз, когда я получаю старые значения, когда evr обновляет существующий сеанс с новым. –

+0

Сессия - отличная вещь, если она используется правильно. Если вы получите ошибки, пожалуйста, уточните, и мы поможем вам справиться с ними. Передача таких вещей в строке запроса намного более зла. –

+0

Сессия имеет свои цели, но большую часть времени я стараюсь избегать их, как чуму. С точки зрения конечного пользователя, время ожидания сеанса и потеря работы - это ужасный опыт. –

0

Сделайте объект сериализуемым и сохраните его в сеансе вне процесса.

Все страницы вашего веб-приложения затем смогут получить доступ к объекту.

0
+0

Я некоторое время размышлял над этим ограничением. Если веб-запрос выполняется между приложением и службой, например (без участия браузера) - это даже имеет значение? – Sinaesthetic

+0

@ Синестетический, я бы проверил документацию IIS/Apache/other, ограничение может быть на уровне сервера. – Fredou

+0

aye. просто ради информации, вот что я нашел: http://www.boutell.com/newfaq/misc/urllength.html – Sinaesthetic

-1

Возможно, я бы использовал куки-файл для хранения объекта.

+0

Что делать, если пользователь отключил cookie ??????? –

+0

В зависимости от вашего приложения, если оно в порядке, вы можете распечатать сообщение об ошибке. Вы не можете сильно отключить файлы cookie, не можете получить свой любимый адрес электронной почты тоже! – rakkc

Смежные вопросы