title: How can I take more control in ASP.NET?
body: <p>I'm trying to build a very, very simple "micro-webapp" which I suspect will be of interest to a few Stack Overflow'rs if I ever get it done. I'm hosting it on my C# in Depth site, which is vanilla ASP.NET 3.5 (i.e. not MVC).</p>
  
  <p>The flow is very simple:</p>
  
  <ul>
  <li>If a user enters the app with a URL which doesn't specify all the parameters (or if any of them are invalid) I want to just display the user input controls. (There are only two.)</li>
  <li>If a user enters the app with a URL which <em>does</em> have all the required parameters, I want to display the results <em>and</em> the input controls (so they can change the parameters)</li>
  </ul>
  
  <p>Here are my self-imposed requirements (mixture of design and implementation):</p>
  
  <ul>
  <li>I want the submission to use GET rather than POST, mostly so users can bookmark the page easily.</li>
  <li>I <em>don't</em> want the URL to end up looking silly after submission, with extraneous bits and pieces on it. Just the main URL and the real parameters please.</li>
  <li>Ideally I'd like to avoid requiring JavaScript at all. There's no good reason for it in this app.</li>
  <li>I want to be able to access the controls during render time and set values etc. In particular, I want to be able to set the default values of the controls to the parameter values passed in, if ASP.NET can't do this automatically for me (within the other restrictions).</li>
  <li>I'm happy to do all the parameter validation myself, and I don't need much in the way of server side events. It's really simple to set everything on page load instead of attaching events to buttons etc.</li>
  </ul>
  
  <p>Most of this is okay, but I haven't found any way of <em>completely</em> removing the viewstate and keeping the rest of the useful functionality. Using the post from <a href="http://aspnyc.blogspot.com/2007/10/how-to-completely-disable-viewstate.html" rel="noreferrer">this blog post</a> I've managed to avoid getting any actual <em>value</em> for the viewstate - but it still ends up as a parameter on the URL, which looks really ugly.</p>
  
  <p>If I make it a plain HTML form instead of an ASP.NET form (i.e. take out <code>runat="server"</code>) then I don't get any magic viewstate - but then I can't access the controls programmatically.</p>
  
  <p>I <em>could</em> do all of this by ignoring most of ASP.NET and building up an XML document with LINQ to XML, and implementing <code>IHttpHandler</code>. That feels a bit low level though.</p>
  
  <p>I realise that my problems could be solved by either relaxing my constraints (e.g. using POST and not caring about the surplus parameter) or by using ASP.NET MVC, but are my requirements really unreasonable?</p>
  
  <p>Maybe ASP.NET just doesn't scale <em>down</em> to this sort of app? There's a very likely alternative though: I'm just being stupid, and there's a perfectly simple way of doing it that I just haven't found.</p>
  
  <p>Any thoughts, anyone? (Cue comments of how the mighty are fallen, etc. That's fine - I hope I've never claimed to be an ASP.NET expert, as the truth is quite the opposite...)</p>