2016-09-13 10 views
3

CustomerEntryModelASP-検証-のタグヘルパーは、サーバー側の検証エラーのために働いていない

[Required] 
    public String FirstName { get; set; } 

CustomerController.cs

[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; 
    } 

CustomerEntry.cshtml

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

jQuery検証ライブラリは含まれていないため、検証はサーバー側で行われます。今、最初の名前が空のページを送信すると、更新アクションが実行され、同じビューが返されますが、エラーは発生しません。

<span asp-validation-for="FirstName" />タグヘルパーの代わりに、私がhtmlヘルパーを使用している場合、@Html.ValidationMessageFor(m => m.FirstName)私はファーストネームに必要なエラーを取得します。

TagHelperは、伝統的なHtmlHelperの動作を拡張して、HTMLフレンドリーな開発体験を提供します。つまり、HtmlHelperで動作するものは、それに対応するTagHelperのものと動作する必要があります。

ModelState.IsValidコールの後に、私はFirstNameプロパティのエラーを持つController.ModelState(インスタンスは)と見ることができます。ただし、TagHelperはバインドできません。このような

<span asp-validation-for="FirstName" /> 

あなたがここにMVC6検証タグヘルパーの詳細を見つけることができ、

http://www.davepaquette.com/archive/2015/05/14/mvc6-validation-tag-helpers-deep-dive.aspx

+0

これはフレームワークの登録された問題です。https://github.com/aspnet/Mvc/issues/4475 –

答えて

11

私はこれを変更しようと提案するかもしれない

<span asp-validation-for="FirstName"></span> 

それは意志差をつける

+2

私はOPと同じ問題を抱えており、これは動作しません。 –

+0

上記の答えは私のために働いた!ありがとう。 – Sam

+0

はい、驚くべきことに、自己閉じタグが原因です。 –

関連する問題