ASP.NET MVC 4 ModelState.IsValid is always false
<p>I realize that this question has been asked before, but I do not see a solution to my issue anywhere. So, I am trying to familiarize myself with MVC. I am using MVC 4, with bootstrap. I am trying to create a contact form. I was following a tutorial and got this below.</p>

<p>Here is the viewmodel data:</p>

<pre><code>public class ContactViewModel
{
    [Required]
    [StringLength(20, MinimumLength = 5)]
    public string Name { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Subject { get; set; }
    [Required]
    public string Message { get; set; }

}
</code></pre>

<p>Here is the cshtml data:</p>

<pre><code>&lt;div class="container"&gt;
    &lt;div class="row"&gt;
        @if (ViewBag.Message == null)
        {
            &lt;div&gt;
                &lt;form method="post"&gt;
                    &lt;div class="form-group"&gt;
                        &lt;label asp-for="Name"&gt;Name&lt;/label&gt;
                        &lt;input asp-for="Name" class="form-control" /&gt;
                        &lt;span asp-validation-for="Name"
                              class="text-muted"&gt;&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="form-group"&gt;
                        &lt;label asp-for="Email"&gt;Email&lt;/label&gt;
                        &lt;input asp-for="Email" class="form-control" /&gt;
                        &lt;span asp-validation-for="Email"
                              class="text-muted"&gt;&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="form-group"&gt;
                        &lt;label asp-for="Subject"&gt;Subject&lt;/label&gt;
                        &lt;input asp-for="Subject" class="form-control" /&gt;
                        &lt;span asp-validation-for="Subject"
                              class="text-muted"&gt;&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="form-group"&gt;
                        &lt;label asp-for="Message"&gt;Message&lt;/label&gt;
                        &lt;textarea rows="5" cols="15"
                                  asp-for="Message" class="form-control"&gt;&lt;/textarea&gt;
                        &lt;span asp-validation-for="Message"
                              class="text-muted"&gt;&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;button type="submit" class="btn"&gt;
                            Send
                        &lt;/button&gt;
                    &lt;/div&gt;

                &lt;/form&gt;
            &lt;/div&gt;
        }

        &lt;div&gt;
            &lt;div&gt;
                @if (ViewBag.Message != null){
                    &lt;div&gt;@ViewBag.Message&lt;/div&gt;
                }
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre>

<p>Here is the controller data:</p>

<pre><code>    [HttpGet]
    public ActionResult Contact()
    {
        ViewBag.Message = null;

        return View();
    }

    [HttpPost]
    public ActionResult Contact(ContactViewModel vm)
    {
        if (ModelState.IsValid)
        {
            try
            {
                MailMessage msz = new MailMessage();
                msz.From = new MailAddress(vm.Email);//Email which you are getting 
                                                     //from contact us page 
                msz.To.Add("email");//Where mail will be sent 
                msz.Subject = vm.Subject;
                msz.Body = vm.Message;
                SmtpClient smtp = new SmtpClient();

                smtp.Host = "smtp.gmail.com";

                smtp.Port = 587;

                smtp.Credentials = new System.Net.NetworkCredential
                ("user", "password has been removed");

                smtp.EnableSsl = true;

                smtp.Send(msz);

                ModelState.Clear();
                ViewBag.Message = "Thanks, your message has been sent.";
            }
            catch (Exception ex)
            {
                ModelState.Clear();
                ViewBag.Message = $"It seems an error has been encountered. Please, try again later. Thank you. If you contact customer support, send them this : {ex.Message}";
            }
        } else
        {
            var errors = ModelState.SelectMany(x =&gt; x.Value.Errors.Select(z =&gt; z.Exception));
        }

        return View();
    }
</code></pre>

<p>The output of the var 'errors' = </p>

<pre><code>{System.Linq.Enumerable.&lt;SelectManyIterator&gt;d__16&lt;System.Collections.Generic.KeyValuePair&lt;string, System.Web.Mvc.ModelState&gt;, System.Exception&gt;}
</code></pre>

<p>My issue is that the code always says that ModelState.IsValid is always false. Why is that so? Thank you.</p>

<p>EDIT:
I forgot to mention that I have my model declared at the top of my cshtml page.
It is declared as <code>@model [namespacehere].ViewModel.ContactViewModel</code></p>