<p>I have a search form in an app I'm currently developing, and I would like for it to be the equivalent of <code>method="GET"</code>.</p>

<p>Thus, when clicking the search button, the user goes to <code>search.aspx?q=the+query+he+entered</code></p>

<p>The reason I want this is simply bookmarkable URLs, plus it feels cleaner to do it this way.</p>

<p>I also don't want the viewstate hidden field value appended to the URL either.</p>

<p>The best I could come up with for this is:  </p>

<ol>
<li>Capture the server-side click event of the button and <code>Response.Redirect</code>.</li>
<li>Attach a Javascript <code>onclick</code> handler to the button that fires a <code>window.location.replace</code>.</li>
</ol>

<p>Both feel quirky and sub-optimal...
Can you think of a better approach?</p>

Use a plain old html form, not a server side form (runat=server), and you should indeed be able to make it work.
This could however be a problem if you have an out of the box visual studio master page which wraps the entire page in a server side form, because you can't nest forms.
Web forms don't have to suck, but the default implementations often do. You don't have to use web forms for everything. Sometimes plain old post/get and process request code will do just fine.