Title left blank since I can't think of non inflammatory title for this post
This works:
This doesn't:

I haven't bothered to find why, but that is surprising to me. (Note that here the enctype is specified as "multipart/form-data", which may or may not be related)
Update: It is not related.
The real culprit, as best I was able to reconstruct is because of this piece of code:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = String.Empty}
);
}
It looks fairly innocuous, doesn't it?
Except that this means that when ASP.Net MVC looks for a matching value for the "id" parameter, it will only look in the route parameters, and not look at the request parameters.
I found this surprising, to say the least.