2016-09-20 10 views
0

私は、ajax呼び出しを使用してJsonResultにポストバックしてテーブル要素を設定するドロップダウンリストを持っています。ドロップダウンリストからの値がレコードを返さない場合、javascript関数は警告を返しますが、返されたレコードがある場合、関数を通過しません。ここ は私のドロップダウンリストである:ここでAjaxポストバックでJSONの結果が返されない

は私のPopulateTransactions機能である:

function PopulateTransactions() { 
      alert("OK"); 
      var success = function (results) { 
       var tbl = $("#tblTransactions"); 
       tbl.empty(); 
       alert(results.length); 
       for (var i = 0; i < results.length; i++) { 
        tbl.append("<tr><td>" + "Hello" + "</td><td>" + "World" + "</td></tr>"); 
       } 
      }; 

      $.ajax({ 
       url: '@Url.Action("GetTransactions", "ProjectProjet")', 
       type: "POST", 
       data: { 
        id: $("#ActivityId").val(), 
        year: $("#SelectedFiscalYear").val() 
       }, 
       dataType: "json", 
       success: success 
      }); 
     } 

そして、ここでは私のするJsonResultです:

私のデータベースからエンティティを返す
public JsonResult GetTransactions(int id, int year) 
    { 
     List<Transaction> data; 

     data = new Transaction().GetTransactionsByActivityFiscalYear(id, year); 

     return Json(data.ToArray()); 
    } 

public List<Transaction> GetTransactionsByActivityFiscalYear(int id, int year) 
    { 

     using (MyEntities ctx = new MyEntities()) 
     { 
      var query = ctx.Transactions.Where(a => a.ActivityId == id && a.ValueDate.Year == year).ToList(); 

      return query; 
     } 
    } 

私の関数からわかるように、アラート(「OK」)は常に表示されますが、結果がある場合は、テーブルにデータが格納されず、警告(results.length)が表示されません。結果がない場合は、両方のアラートが表示されます。私のテーブルは、私のコントローラによって最初に読み込まれたときに読み込まれますが、ドロップダウンリストの値を変更するたびにJavascriptのonchangeイベントによって読み込まれます。ここに私のHTMLテーブルがあります:

<table id="tblTransactions"> 
       @foreach (var tran in Model.TransactionsByFiscalYear) 
       { 
        <tr> 
         <td> 
          tran.ValueDate 
         </td> 
         <td> 
          tran.Value 
         </td> 
        </tr> 
       } 
      </table> 

私は間違って何をしているのですか? ありがとう

+1

コンソールエラーが発生しましたか?渡されたデータは 'data:JSON.stringify:({id:$("#ActivityId ")、val()、year:$("#SelectedFiscalYear ")、val()})'でエンコードする必要があります。次に、 'error:function(jqXHR、textStatus、errorThrown){console.log(textStatus、errorThrown);}のように成功した後に' error: '設定を追加することをお勧めします。 } '何が起きているのか見てみましょう。 –

+0

はGetTransactionsメソッドが呼び出されますか? Ajax関数の後にsuccess関数を記述してみてください。 – Balan

+0

はい、GetTransactionsが呼び出されます。私はまた、以下の成功関数を移して、それを成功呼び出しに加えましたが、どちらかが成功しました。 @Balan – devguy

答えて

0

@lamelemon私はそれを得ました。トランザクションのPOCOクラスを作成し、エンティティを取得してこのクラスに移入しました。私はこの新しいクラスを返すとき、それはうまく動作します。私はエンティティフレームワークのシリアル化に問題があると思います。 皆様のご協力のおかげで

関連する問題