title: ModelBinding enum values for selectlist and selected item
body: <p>Ok, this was supposed to be a question asking for help getting my form to work properly. In the process of creating an example to post, I figured out what the fix is. </p>
  
  <p>So now it's a become a question about why it works one way and not the other. I really cannot understand the behaviour. Have I found a bug in MVC? Or is there something I don't understand about html requests which makes this behaviour correct?</p>
  
  <p>The example invloves setting the selected value in a dropdown through an enum property in a view model which is bound from the querystring (it's probaly clearer what I'm talking about if you just read the code):</p>
  
  <p><strong>Controller/Model</strong></p>
  
  <pre><code>public class HomeController : Controller
  {
      public ActionResult Index(TestModel model)
      {
          return View(model);
      }
  }
  
  public class TestModel
  {
      public SelectList EnumOptions { get; set; }
      public TestEnum EnumValue { get; set; }
  
      public TestModel()
      {
          var options =  from Enum e in Enum.GetValues(typeof(TestEnum))
                           select new { Value = e, Name = e.ToString() };
  
          EnumOptions = new SelectList(options, "Value", "Name", TestEnum.NotSet);
      }
  }
  
  public enum TestEnum
  {
      NotSet = 0,
      Dog = 1,
      Cat = 2
  } 
  </code></pre>
  
  <p><strong>View</strong></p>
  
  <pre><code>@Html.DropDownListFor(m =&gt; m.EnumValue, Model.EnumOptions)
  
  &lt;a href="?EnumValue=Dog"&gt;Dog numeric&lt;/a&gt;
  &lt;a href="?EnumValue=1"&gt;Dog string&lt;/a&gt;
  </code></pre>
  
  <p>It's all pretty simple.</p>
  
  <p>The question is, why doesn't the second "Dog" link work properly? Note it submits the enumValue as a numeric property, instead of as a "string" property. </p>
  
  <p>But the model binder has no problem with this. <strong>The model supplied to the View is exactly the same in either case</strong>. So how does the dropdown selected value get rendered correctly in one case but not the other?</p>