В настоящее время я не могу найти разумного объяснения, почему второй не работает. Но это работает, если вы измените свою подпись действия, чтобы она выглядела так:
public ViewResult Index([Bind(Prefix="")]Contact contactMessage)
Полагаю, это как-то связано с DefaultModelBinder.
UPDATE:
Хорошо, это начинает быть действительно забавным:
// Not working
public ViewResult Index(Contact contactMessage)
// Not working
public ViewResult Index(Contact contactmessage)
// Working
public ViewResult Index(Contact contact)
// Working
public ViewResult Index(Contact contactMsg)
// Working
public ViewResult Index(Contact abc)
Странно, действительно!
UPDATE2:
Хорошо, понял. У вас есть свойство с именем ContactMessage
в вашей модели, а имя переменной, переданное в действии, также называется contactMessage
. Отсюда и двусмысленность. Нет ошибки в DefaultModelBinder. Он не может одновременно привязать свойство типа string и Contact, регистр закрыт: -)