<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa" -->

---
title: Leveraging ASP.NET MVC 2 futures “ViewState” | daily.dev
description: A follow-up post clarifies a feature misleadingly called &#x27;ViewState&#x27; in a previous ASP.NET MVC 2 futures write-up, renaming it &#x27;Serialized Model State&#x27; (SMS)...
canonical: https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Leveraging ASP.NET MVC 2 futures “ViewState” | daily.dev
og:description: A follow-up post clarifies a feature misleadingly called &#x27;ViewState&#x27; in a previous ASP.NET MVC 2 futures write-up, renaming it &#x27;Serialized Model State&#x27; (SMS)...
og:url: https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa
og:image: https://api.daily.dev/og/posts/cELSJftwa.png
og:image:alt: Leveraging ASP.NET MVC 2 futures “ViewState”
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Leveraging ASP.NET MVC 2 futures “ViewState”

**[Maarten Balliauw](https://daily.dev/sources/maartenballiauw)** · 5 min read · 0 upvotes · 0 comments

## Summary

A follow-up post clarifies a feature misleadingly called 'ViewState' in a previous ASP.NET MVC 2 futures write-up, renaming it 'Serialized Model State' (SMS) since it serializes the model, not the view. The post walks through a practical optimistic concurrency example using a Person model with a RowVersion timestamp, showing how Html.Serialize persists model state to a hidden field and how the [Deserialize] attribute restores it on postback to detect concurrent database edits, comparing it to alternatives like TempData, Session, or Cookies.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.maartenballiauw.be/posts/2009-10-08-leveraging-aspnet-mvc-2-futures-viewstate>

## Questions this post answers

### How can I implement optimistic concurrency control in ASP.NET MVC 2 using the futures assembly?

Use the Html.Serialize helper to persist the model, including its RowVersion timestamp, into a hidden form field on the edit view. On postback, the [Deserialize] attribute reconstructs the original Person object from that hidden field, which can then be compared against the current database row's RowVersion to detect if another user modified the record since it was fetched.

_See the full code pattern for optimistic concurrency checks surfaced for ASP.NET developers on daily.dev._

## Similar posts on daily.dev

- [Managing State in .NET MAUI: From Page ViewModelsSimple State to App-Wide Stores](https://daily.dev/posts/managing-state-in-net-maui-from-page-viewmodelssimple-state-to-app-wide-stores-fboykipgi) · Syncfusion · 0 upvotes · 0 comments
- [htmxRazor v1.4.0: SSE Streaming, Multi-step Wizard, and Optimistic UI - Chris Woody Woodruff](https://daily.dev/posts/htmxrazor-v1-4-0-sse-streaming-multi-step-wizard-and-optimistic-ui---chris-woody-woodruff-djatrl3bc) · We Are .NET · 20 upvotes · 0 comments

---

Tags: [#c#](https://daily.dev/tags/c#)

[View this post on daily.dev](https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Leveraging ASP.NET MVC 2 futures “ViewState”","url":"https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa"},"datePublished":"2026-10-04T13:05:40.315Z","dateModified":"2026-10-04T13:07:43.142Z","description":"A follow-up post clarifies a feature misleadingly called 'ViewState' in a previous ASP.NET MVC 2 futures write-up, renaming it 'Serialized Model State' (SMS)...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3accadba5f9017d92e78d0de609b2b0f?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3accadba5f9017d92e78d0de609b2b0f?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Maarten Balliauw","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Maarten Balliauw","logo":"https://media.daily.dev/image/upload/s--rOTg3VYO--/f_auto,q_auto/v1791119043/logos/maartenballiauw?_a=BAMAMicg0","url":"https://daily.dev/sources/maartenballiauw"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"c#","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Maarten Balliauw","item":"https://daily.dev/sources/maartenballiauw"},{"@type":"ListItem","position":3,"name":"Leveraging ASP.NET MVC 2 futures “ViewState”"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/leveraging-asp-net-mvc-2-futures-viewstate--celsjftwa#faq","mainEntity":[{"@type":"Question","name":"How can I implement optimistic concurrency control in ASP.NET MVC 2 using the futures assembly?","acceptedAnswer":{"@type":"Answer","text":"Use the Html.Serialize helper to persist the model, including its RowVersion timestamp, into a hidden form field on the edit view. On postback, the [Deserialize] attribute reconstructs the original Person object from that hidden field, which can then be compared against the current database row's RowVersion to detect if another user modified the record since it was fetched. See the full code pattern for optimistic concurrency checks surfaced for ASP.NET developers on daily.dev."}}]}
```

