I have an action like this:
public class News : System.Web.Mvc.Controller { public ActionResult Archive(int year) { / *** / } }
With a route like this:
routes.MapRoute( 'News-Archive', 'News.mvc/Archive/{year}', new { controller = 'News', action = 'Archive' } );
The URL that I am on is:
News.mvc/Archive/2008
I have a form on this page like this:
<form> <select name='year'> <option value='2007'>2007</option> </select> </form>
Submitting the form should go to News.mvc/Archive/2007 if ‘2007’ is selected in the form.
This requires the form ‘action’ attribute to be ‘News.mvc/Archive’.
However, if I declare a form like this:
<form method='get' action='<%=Url.RouteUrl('News-Archive')%>'>
it renders as:
<form method='get' action='/News.mvc/Archive/2008'>
Can someone please let me know what I’m missing?
You have a couple problems, I think.
First, your route doesn’t have a default value for ‘year’, so the URL ‘/News.mvc/Archive’ is actually not valid for routing purposes.
Second, you’re expect form values to show up as route parameters, but that’s not how HTML works. If you use a plain form with a select and a submit, your URLs will end up having ‘?year=2007’ on the end of them. This is just how GET-method forms are designed to work in HTML.
So you need to come to some conclusion about what’s important.