2016-04-05 11 views
0

CSVファイルと文字列をポストするAJAX POSTがあります。これが受信されます。私はこのデータを処理し、詳細をデータベースに挿入します - 成功。戻り値としてオブジェクトとして新しいレコードを返します。これは、ビューで使用されるモデルでもあります。成功しました。MVC6 Ajax POST - ファイルは処理されましたが、データでもビューが返されません

私は返信としてこれを送り返し、何も表示に何も起こりません。その更新されません。

私は他のポストでこれを探しました - いくつかのPHPとAjax POSTを使用するとHttpPostの結果はうまくいかないことを示すいくつかの兆候..しかし、これはうまく動作します。 Ajax投稿 ここに私のコントローラのアクションは、次のとおりです。

 // GET: /SuburbsAndPostcodesAdminController/ 
    public IActionResult FileIndexView() 
    { 
     var InitialDisplayView = new NewSuburbsAndPostcodesImported 
     { 
      Message = "Nothing imported yet.", 
      SuburbAndPostcodesImported = null 
     }; 

     return View("FileIndexView", InitialDisplayView); 
    } 


     // POST: /SuburbsAndPostcodesAdminController/Index 
    [HttpPost] 
    public IActionResult FileIndexView(CSVFileUploadViewModel CSVFileUpload) 
    { 
     if (ModelState.IsValid) 
     { 
      //Process the file 
      NewSuburbsAndPostcodesImported FileProcessed = _service.ProcessCSV(CSVFileUpload); 

      return View("FileIndexView", FileProcessed); 

     } 
     return View(); 

    } 

私は、「ビューを返します(」FileIndexViewにブレークポイントを持っている「FileProcessedを);」 FileProcessedは正しいデータを持っています。

CSHTMLファイルは次のとおりです。ここで

@model ProgressBar2.ViewModels.NewSuburbsAndPostcodesImported 

@{ 
    ViewData["Title"] = "Suburbs and Postcodes Upload page"; 
} 
... 

<div> 
<h4> 
    @Html.DisplayFor(modelItem => Model.Message) 
</h4> 
</div> 
@if (Model.SuburbAndPostcodesImported != null) 
{ 
    <table class="table"> 
     <tr> 
     <th> 
      ... 
     </th> 
     <th> 
      ... 
     </th> 
     <th> 
      ... 
     </th> 
    </tr> 

     @foreach (var item in Model.SuburbAndPostcodesImported) 
    {... 

EDITは、AJAX POST機能である:

 $('#SubmitFile').click(function (e) { 
     e.preventDefault(); // <------------------ stop default behaviour of button 

     //var fileUpload = input.files[0]; 
     var url = "/SuburbsAndPostcodesAdmin/FileIndexView"; 
     var connId = $.connection.hub.id; 
     var fd = new FormData(); 
     fd.append('File', $("#txtFileUpload")[0].files[0]); 
     fd.append('connId', connId); 

     $.ajax({ 
      type: "POST", 
      url: url, 
      data: fd, 
      processData: false, 
      contentType: false, 

     }); 
    }); 

なぜこの更新にビューを文句を言いませんか?

ビューの更新とリストのレンダリングを確実に行うにはどうすればよいですか?

+1

AJAXコールを作成して成功コールバックのビューを*更新*するコードを表示できますか?また、部分的な見解を返すべきではありませんか? –

+0

私はAjax呼び出しを追加しました。私はそれがビューのコンポーネントが必要だと思うが、私はそれが私がちょうど送信フォームを使用していたときに更新されたことがわかった。私はAjax投稿をするときに問題があると思っています。おそらく他の人がAjaxを使ってこれを行う正しい方法を特定しています... – si2030

+0

DOMを更新するためにAJAXリクエストの 'success'コールバックを購読したことはありません。これは、AJAXを使わないでフォームを送信すると動作します。この場合、ページ全体がリロードされるからです。 AJAXの全体のポイントは、ページ全体をリロードせずにサーバーにHTTPリクエストを行うことができることです。下の私の答えを見てください。 –

答えて

0

あなたのAJAX呼び出しでは、コントローラアクションから返された結果でDOMの関連部分を更新するはずの成功条件を決して処理していないようです。ここでは、これを扱うことができる方法の例です:

$.ajax({ 
    type: "POST", 
    url: url, 
    data: fd, 
    processData: false, 
    contentType: false, 
    success: function(result) { 
     // The result variable here will contain the response 
     // body from the controller action. Here you could use it 
     // to update the respective portion of the DOM 
     $('#someContainerId').html(result); 
    } 
}); 

これは、あなたがid="someContainerId"とあなたには、いくつかのdiv要素で更新したい部分を包み、お使いのコントローラのアクションのみ関連するセクションが含まれますPartialViewを返すことをしていることを前提としています。

+0

私のビューがajaxのsuccess関数によって処理されたときには?どのように私は "結果"を使用するのだろう...それは私のモデルです.. – si2030

+0

いいえ、それはモデルではありません。これは、POSTコントローラーのアクションが返すものであれば何でも可能です。 HTMLでもかまいません。そのため、PartialViewを返すようにコントローラアクションを提案しました。この部分HTMLをDOMの関連するセクションに直接挿入できるようにします。 –

+0

おかげさまでダーリン...あなたのアドバイスを使用してリファクタリングします。 – si2030

関連する問題