2016-07-26 13 views
0

私はjQuery用のDataTables Tableプラグインを初めて使用しており、バックエンドデータベースからデータを取得してグリッド内に正常に表示することができました。これは$(document.ready())の間に行われています。ユーザーがページを送信したときにテーブルを再作成する検索基準を提示するページを作成しました。誰かが、提出の結果として新しい結果をテーブルに再投入する方法を示す簡単な例を提供できますか?私はMVCも使用していますが、これは初めて問題に取り組んでいるかもしれません。検索後のデータテーブルの再投入の例

以下は試したjQueryコードですが、結果は既存のテーブルにバインドされません。私はまた、テーブルに既に他のオプションが設定されており、ajaxソースを変更する必要があると思っているオプションだけで、ajaxソースも指定しました。以下に示すように

おかげで、トム

$('#SubmitForm').on('submit', function (e) { 
    table = $('#grid').DataTable(); 
    table.sAjaxSource = "GetEmails"; 
    table.bServerSide = true; 
    table.bProcessing = true; 
    table.aoColumns = [ 
     { "sName": "Id" }, 
     { "sName": "Email" }, 
     { "sName": "Reason" }, 
     { "sName": "Name" }, 
     { "sName": "Organization" }, 
     { "sName": "Email_Verified_Date" } 
    ]; 

    return true; 
}); 

ブラウザは、AJAX源の出力を表示します。

{ "sEcho":ヌル、 "iTotalRecords":94、 "iTotalDisplayRecordsが":94、 "aaData":[]}以下

は、私がどのように表示され、私の意見の抜粋ですDataTableを使用します。

この動作は、document.readyを介してページロード中にDataTableがレンダリングされ、読み込まれることに注意してください。

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>How to use jQuery Grid with ASP.NET MVC</title> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      var oTable = $('#grid').dataTable({ 
       "bServerSide": true, 
       "sAjaxSource": "home/GetEmails1", 
       "bProcessing": true, 
       "aoColumns": [ 
           { "sName": "Id" }, 
           {"sName": "Email"}, 
           {"sName": "Reason"}, 
           { "sName": "Name" }, 
           { "sName": "Organization" }, 
           { "sName": "Email_Verified_Date" } 
       ] 
      }); 
    }); 

    </script> 
</head> 
<body> 
    <div class="table-responsive"> 
     <table id="grid"> 
      <thead> 
       <tr> 
        <th>Id</th> 
        <th>Email</th> 
        <th>Reason</th> 
        <th>Name</th> 
        <th>Organization</th> 
        <th>Email Verified Date</th> 
       </tr> 
      </thead> 
      <tbody> 
      </tbody> 
     </table> 
    </div> 
</body> 
</html> 

これは動作しない2番目のビューです。ここでは、検索条件を取って、テーブルに検索結果を入力して入力しようとしています。上の動作例のajax呼び出しとここで動作していない例は、ajax呼び出しと同じ結果を返します。このビューにページ読み込みのサンプルを含めて、検索が完了して再読み込みされるときにDataTableが既に初期化されるのを助けるかもしれないと考えています。ご協力いただきありがとうございます!

2番目の例では
@model MvcMovie.Models.ACORD360VerifiedEmail 

@{ 
    ViewBag.Title = "Home Page"; 
} 

<!DOCTYPE html> 

<html> 
    <head> 
     <meta name="viewport" content="width=device-width" /> 
     <title>Search Page</title> 

     <script type="text/javascript"> 
      $(document).ready(function() { 

       var oTable = $('#grid').dataTable({ 
        "bServerSide": true, 
        //"sAjaxSource": "GetEmails", 
        "sAjaxSource": "GetEmails", 
        "bProcessing": true, 
        "aoColumns": [ 
            { "sName": "Id" }, 
            { "sName": "Email" }, 
            { "sName": "Reason" }, 
            { "sName": "Name" }, 
            { "sName": "Organization" }, 
            { "sName": "Email_Verified_Date" } 
        ] 
       }); 

     $('#SubmitForm').on('submit', function (e) { //use on if jQuery 1.7+ 
      table = $('#grid').DataTable(); 
      table.ajax.reload(); 

      return true; 
     }); 
    }) 
     </script> 
    </head> 
    <body> 
    @using (Html.BeginForm("GetEmails", "ACORD360VerifiedEmail", FormMethod.Post, new { id = "SubmitForm" })) 
    { 
     <div class="panel-body"> 
      <h2>Lyris - ACORD360 Integration</h2> 
      <p class="lead">This allows you to modify Lyris and ACORD360 email data.</p> 
     </div> 

     <div class="row"> 
      <div class="col-md-3"> 
       @Html.LabelFor(m => m.EmailVerifiedStartDate) 
       @Html.TextBoxFor(m => m.EmailVerifiedStartDate, 
      new { @class = "form-control date-picker", placeholder = "Enter date here", id = "EmailVerifiedStartDate" }) 
      </div> 
      <div class="col-md-3"> 
       @Html.LabelFor(m => m.EmailVerifiedEndDate) 
       @Html.TextBoxFor(m => m.EmailVerifiedEndDate, new { @class = "form-control date-picker", placeholder = "Enter date here", id = "EmailVerifiedEndDate" }) 
      </div> 
      <div class="col-md-3"> 
       @Html.LabelFor(m => m.OrganizationName) 
       @Html.TextBoxFor(m => m.OrganizationName) 
      </div> 
      <div> 
       <input type="submit" value="Search" /> 
      </div> 
     </div> 
     <br /><br /><br /> 
     <div class="table-responsive"> 
      <table id="grid"> 
       <thead> 
        <tr> 
         <th>Id</th> 
         <th>Email</th> 
         <th>Reason</th> 
         <th>Name</th> 
         <th>Organization</th> 
         <th>Email Verified Date</th> 
        </tr> 
       </thead> 
       <tbody></tbody> 
      </table> 
     </div> 
     <div class="row"> 
      <div class="col-md-12"> 
       <br /><br /> 
       <label id="Error"></label> 
       <label id="Info"></label> 
      </div> 
     </div> 
    } 
    </body> 
</html> 

答えて

0

、それはあなたが任意のデータを変更するようには見えません。

$('#SubmitForm').on('submit', function (e) { //use on if jQuery 1.7+ 
     table = $('#grid').DataTable(); 
     table.ajax.reload(); 

     return true; 
}); 

では、あなたがテーブルを再ロードし、フォームを投稿している、提出します。あなたはAjaxのソースにデータをつもりなら、成功した場合に、データを投稿し、ために使用jQueryのテーブルをリロード:

$.ajax({ 
    url: url, type: 'POST', 
    success: function() { 

     table.ajax.reload(); 
    } 
    }).fail(function() { 
     alert("Sorry. Server unavailable."); 
    }); 
+0

私はこれを試しましたが、同じ結果が得られました。私は、現実のシナリオと非実際のシナリオの両方についてajax呼び出しから戻るときの結果が同じであることを確認しました。 使用したコードのスニペットを次に示します。 table = $( '#grid')。DataTable(); table.ajax.reload(); –

+0

勤務と非勤務のシナリオはどういう意味ですか?どのようにデータを提出していますか?どのようにそれが変更されることを期待していますか? –

+0

メインポストに上記の作業用と非作業用の両方のコードを追加しました。ご協力いただきありがとうございます。 –

0

それは私がMVC、AJAXとDataTableの間を学ぶことがたくさんあったことが判明しました。私はボタンをクリックしてボタンを使うのではなく、サブミットを使用しました。それはうまくいった。私はそれがASP.Net Webフォームで非常に多くの時間を費やした後、このアプローチを使用して爽快だと言わなければなりません。提案をしてくれたすべての人に感謝します。

関連する問題