asp-validation-for tag helper is not working for server side validation errors
<p><strong>CustomerEntryModel</strong></p>

<pre><code>    [Required]
    public String FirstName { get; set; }
</code></pre>

<p><strong>CustomerController.cs</strong></p>

<pre><code>    [HttpGet]
    [Route("Get")]
    public IActionResult Get()
    {
        CustomerEntryModel model = new CustomerEntryModel();
        return View("CustomerEntry", model);
    }

    [HttpPost]
    [Route("Update")]
    public ActionResult Update([FromForm]CustomerEntryModel model)
    {
        if (!ModelState.IsValid)
        {
            return View("CustomerEntry", model);
        }
        return null;
    }
</code></pre>

<p><strong>CustomerEntry.cshtml</strong></p>

<pre><code>@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
&lt;form asp-controller="Customer" asp-action="Update" method="post"&gt;
    &lt;input type="text" asp-for="FirstName" /&gt;
    &lt;span asp-validation-for="FirstName" /&gt;
    &lt;input type="submit" value="Submit" /&gt;
&lt;/form&gt;
</code></pre>

<p>I do not include the jQuery validation libraries, so the validation occurs on the server side. Now, when I submit the page with first name empty, the update action gets executed and I receive back the same view, but without any error.</p>

<p>Instead of <code>&lt;span asp-validation-for="FirstName" /&gt;</code> tag helper, if I use the html helper <code>@Html.ValidationMessageFor(m =&gt; m.FirstName)</code> I get the required error for first name.</p>

<p>As per my understanding <code>TagHelper</code> extends the behavior of traditional <code>HtmlHelper</code> to provide HTML friendly development experience. That means, something that works with <code>HtmlHelper</code> has to work with it's <code>TagHelper</code> counterpart.</p>

<p>After the <code>ModelState.IsValid</code> call, I CAN see <code>Controller.ModelState</code> (instance of <code>ModelStateDictionary</code>), having the error for <code>FirstName</code> property. However, the <code>TagHelper</code> isn't able to bind it.</p>

<p>You can find the MVC6 validation tag helpers detail here,</p>

<p><a href="http://www.davepaquette.com/archive/2015/05/14/mvc6-validation-tag-helpers-deep-dive.aspx" rel="noreferrer">http://www.davepaquette.com/archive/2015/05/14/mvc6-validation-tag-helpers-deep-dive.aspx</a></p>