title: Parameter for action always not null
body: <p>Here's the code:</p>
  
  <pre><code>public class MessagesController
  {
      public virtual ActionResult Compose(ComposeMessageViewModel composeMessageViewModel = null)
      {
          if (composeMessageViewModel == null)
          {
              // never executed as composeMessageViewModel is always not null
              composeMessageViewModel = new ComposeMessageViewModel();
          }
  
          return View(composeMessageViewModel);
      }
  }
  </code></pre>
  
  <p>And the definition of ComposeMessageViewModel</p>
  
  <pre><code>public class ComposeMessageViewModel
  {
      [DisplayName("To:")]
      [NotEmpty] //custom ValidationAttribute
      public IEnumerable&lt;MessageRecipientViewModel&gt; Recipients { get; set; }
      [DisplayName("Subject:")]
      public string Subject { get; set; }
      public string Body { get; set; }
  }
  </code></pre>
  
  <p>The problem is, when I navigate to <code>/Messages/Compose</code> (no query string, no form parameters), I'm expecting the parameter to be null so that no validation errors would occur, but it's an actual object with all its fields/properties set to default values.</p>
  
  <p>This is undesirable as it causes the validation for the model to be executed, when it should not be as nothing has been entered yet!</p>
  
  <p>There's no custom ModelBinder set for this class, and the default ModelBinder has not been changed.</p>
  
  <p>WTF?</p>