As you probably know, viewstate restores values based on the IDs of contorls during postback. In order for this to work, ViewState expects the contorl tree to be the same before and after. The error basically tells you that the control tree is got on postback wasn't the same as before. Since you are using dynamic controls, make sure to give them an explicit ID, and to make sure htey are recreated on postback with those same IDs.
The following example may help:
Keep me posted
asp.net Chat http://cutesoft.net/ASP.NET+Chat/default.aspx
Web Messenger: http://cutesoft.net/Web-Messenger/default.aspx
asp.net wysiwyg editor: http://cutesoft.net/ASP.NET+WYSIWYG+Editor/default.aspx
asp wysiwyg html editor: http://cutesoft.net/ASP
asp.net Image Gallery: http://cutesoft.net/ASP.NET+Image+Gallery/default.aspx
Live Support: http://cutesoft.net/live-support/default.aspx