私は、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>
私は間違って何をしているのですか? ありがとう
コンソールエラーが発生しましたか?渡されたデータは 'data:JSON.stringify:({id:$("#ActivityId ")、val()、year:$("#SelectedFiscalYear ")、val()})'でエンコードする必要があります。次に、 'error:function(jqXHR、textStatus、errorThrown){console.log(textStatus、errorThrown);}のように成功した後に' error: '設定を追加することをお勧めします。 } '何が起きているのか見てみましょう。 –
はGetTransactionsメソッドが呼び出されますか? Ajax関数の後にsuccess関数を記述してみてください。 – Balan
はい、GetTransactionsが呼び出されます。私はまた、以下の成功関数を移して、それを成功呼び出しに加えましたが、どちらかが成功しました。 @Balan – devguy