12

次のコードを使用しています。

$http({
    method: 'GET',
    url: '/Admin/GetTestAccounts',
    data: { applicationId: 3 }
}).success(function (result) {
    $scope.testAccounts = result;
});

このコードは、以下をサーバーに送信します。

http://127.0.0.1:81/Admin/GetTestAccounts

これが MVC コントローラーによって受信されると、次のようになります。

[HttpGet]
public virtual ActionResult GetTestAccounts(int applicationId)
{
    var testAccounts =
        (
            from testAccount in this._testAccountService.GetTestAccounts(applicationId)
            select new
            {
                Id = testAccount.TestAccountId,
                Name = testAccount.Name
            }
        ).ToList();

    return Json(testAccounts, JsonRequestBehavior.AllowGet);
}

applicationId がないことを訴えます。

パラメーター ディクショナリに、メソッドの null 非許容型 'System.Int32' のパラメーター 'applicationId' の null エントリが含まれています

applicationId がパラメーターとして送信されない理由を説明できますか? 以前は、次の非Angularコードでこれを行っていましたが、うまくいきました:

$.ajax({
    url: '/Admin/GetTestAccounts',
    data: { applicationId: 3 },
    type: 'GET',
    success: function (data) {
        eViewModel.testAccounts(data);
    }
});
4

2 に答える 2

3

わかりました、私はこれに答えようとします。

問題は、angularjs が http に渡されるデータが urlencode されると想定していることだと思います。オブジェクトがある場合、角度が暗黙的にシリアル化しない理由がわかりません。したがって、自分でエンコードする必要があります。

 $http({
       method: 'GET',
       url: '/Admin/GetTestAccounts',
       data: 'applicationId=3'
       })

または、jQuery パラメータを使用してエンコードします。

$http({
     method: 'GET',
     url: '/Admin/GetTestAccounts',
     data: $.param({ applicationId: 3 })
     })
于 2013-03-29T18:04:26.450 に答える