2016-09-07 6 views
0

ModelStateエラーをjsonとjqueryに渡すと、フォーム内のオブジェクトが関連付けられます。マイ形式:ASP net 4エラーオブジェクトをjsonに渡す方法

<form id="form"> 
    <div class="row"> 
     <div class="col-sm-6"> 
      <div class="form-group"> 
       @Html.TextBoxFor(m => m.VatNumber,new { @class = "form-control", @id="VatNumber"}) 
       @Html.ValidationMessageFor(model => model.VatNumber, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="col-sm-6"> 
      <div class="form-group"> 
       <input type="submit" class="btn btn-primary" value="Check VAT" /> 
      </div> 
     </div> 
    </div> 
</form> 

マイコントローラ:

[HttpPost] 
    public ActionResult CheckVat(VatSearch data) 
    { 
     //string a =vatnumber.VatNumber; 
     //return Json(data.VatNumber); 
     return Json(ModelState); 
    } 

彼はエラーを与える:

It was detected a circular reference to void the serializade an object type

答えて

0

あなたのコードは実際に理にかなっていません。なぜModelState辞書を返すのですか? Modelバリデーションを利用しようとしているならば、それを行うためのいくつかの他の方法があります。

モデルの検証が失敗した場合、あなたはJSONレスポンスの一環として、検証エラーメッセージを返すと、ユーザーに

[System.Web.Mvc.HttpPost] 
public ActionResult CheckVat(VatSearch data) 
{ 
    var list = new List<string>(); 
    if (!ModelState.IsValid) 
    { 
     var errors = ViewData.ModelState.Values 
          .SelectMany(f => f.Errors 
               .Select(x => new {Error = x.ErrorMessage, 
                 Exception =x.Exception})).ToList(); 
     return Json(new {Status="error",Errors = errors}); 

    } 
    return Json(new {Status="success"}); 
} 

とあなたのAJAX呼び出しの成功の方法で、必要に応じていることを示し、単にStatusプロパティをチェックすることができますそれが「エラー」であれば、Errorsコレクションをループし、各エラーを取得し、必要に応じて使用します。

success: function (result) { 
    if(result.Status==="error") 
    $.each(result.Errors, function(a, b) { 
      alert(b.Error); 
    }); 
}, 

真剣に検討する必要があるもう1つのことは、クライアント側の控えめな検証を使用することです。これにより、フォームを送信する前でもクライアント側の検証が行われます。

+0

もし私がそうしていれば、価値観はいつも賢明なものになり、私は目立たない検証 –

関連する問題