<p>I try <code>Request.Form.Set(k, v)</code> but it's throwing exception </p>

<blockquote>
  <p>Collection is read-only</p>
</blockquote>

The form is a representation of what the client sent in the request. What is it you want to do? Personally, I would try to separate the "read the form" code from the "do something with the values" code - that way, you can do any pre-processing early on (when reading from the form), and none of the later code needs to know about what was
actually
sent - it just takes the values given to it (i.e. it never talks to the request directly).
It also means you can test your logic without the need for a form, or even an http-request at all.
Actually, ASP.NET MVC will do a lot of this (the above paragraph) for you...
Note that you can update the .Items collection - but this is a bit more vague (i.e. it doesn't relate specifically to the form).