ASP.NET MVC - есть ли способ имитировать ViewState? - PullRequest
9 голосов
/ 21 марта 2009

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

Итак, хотя я не сохраняю эти данные в БД, я сохраняю в сеанс. Мне сказали сохранить в куки, но похоже, что куки имеют ограничение по размеру. Итак, я сохраняю в сеансе.

Buuuut, мне также сказали, что я могу сохранить эту информацию (часы и день недели) на странице пользователя, имитируя ASP.NET ViewState ...

Кто-нибудь знает, как это сделать? Кто-нибудь знает, как временно сохранить эти данные с помощью cookie или Session?

Спасибо !!

Ответы [ 4 ]

20 голосов
/ 21 марта 2009

Скрытые поля ввода не помогут?

<%= Html.Hidden(...) %>

Обновление (сериализация объекта в base64):

var formatter = new BinaryFormatter();
var stream = new MemoryStream();
formatter.Serialize(stream, myObject); // myObject should be serializable.
string result = Convert.ToBase64String(stream.ToArray());

Когда вы хотите получить его обратно:

var formatter = new BinaryFormatter();
var stream = new MemoryStream(Convert.FromBase64String(hiddenFieldValue));
var myObject = (MyObjectType)formatter.Deserialize(stream);

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

Примечание: ASP.NET использует LosFormatter вместо BinaryFormatter для сериализации ViewState, поскольку это более эффективная или сериализация на основе ASCII. Возможно, вы тоже захотите это рассмотреть.

3 голосов
/ 22 марта 2009

TempData ["MyData"], имейте в виду, это будет продолжаться только один раз в оба конца.

0 голосов
/ 21 марта 2009

Если вы просто хотите сохранить данные для этого запроса и следующего запроса, я бы порекомендовал использовать Tempdata, иначе я бы порекомендовал использовать ответ Мехрдада.

0 голосов
/ 21 марта 2009

Вы можете сохранить массив javascript на клиенте ... и затем передать всю информацию, когда пользователь в конечном итоге сохранит.

Вы должны работать немного больше, но в итоге это окупается.

Я активно использую jQuery , чтобы делать такие вещи, это проще, чем кажется.

...