1

オブジェクトのリストをコントローラー内のメソッドに送信する Ajax 呼び出しがあります。
私はそれが送信するjsonを見ましたが、すべてが順調に進んでいるようです。しかし、コントローラーに到達すると、適切な数のオブジェクトを含むリストが表示されますが、json で値が正しく設定されていても、それらのプロパティはすべて null です。

例: 10 個のオブジェクトを含むリストがあり、そのすべてに特定の値が設定されたプロパティがあります。呼び出しを実行しますが、リストがコントローラーに到達すると、10 個のオブジェクトがあり、すべてのプロパティが null に設定されます。

誰かがなぜこれが起こるのか知っていますか?

呼び出しは次のとおり
です。大量のデータのため、get の代わりに post を使用する必要がありました。

$("#testeFA").click(function()
{
    <% JavaScriptSerializer serializador = new JavaScriptSerializer(); %>

    var models = <%: MvcHtmlString.Create(serializador.Serialize(apontamentos)) %>
    //"apontamentos" is the name of the List<ApontamentoModel>

    $.post('<%: Url.Action("GeraFA") %>', { models: models }, function (sucesso)
    {
        //do whatever
    }, 'json');
});

メソッドは次のとおりです。

public JsonResult GeraFA(List<ApontamentoModel> models) <- this is where the list shows all the objects' properties as null
{
    JsonResult result = new JsonResult();

    //do whatever

    result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
    return result;
 }

これが json の一部です。構造を確認できます。

[{"DocEntry":1,
  "LineID":5,
  "Data":"01/06/2012",
  "HoraInicial":
      {"Ticks":288000000000,
       "Days":0,
       "Hours":8,
       "Milliseconds":0,
       "Minutes":0,
       "Seconds":0,
       "TotalDays":0.33333333333333331,
       "TotalHours":8,
       "TotalMilliseconds":28800000,
       "TotalMinutes":480,
       "TotalSeconds":28800},
  "CodigoCliente":"C00013",
  "Cliente":"Client Name",
  "CodigoProjeto":283,
  "Projeto":"Project Name",
  "CodigoServico":18,
  "TipoServico":"",
  "CodigoDespesa":0,
  "Despesa":"",
  "Quantidade":0,
  "NumeroChamado":0,
  "NumeroFA":10,
  "Apropria":true,
  "Narrativa":"teste",
  "NomeConsultor":"Name"},
 {"DocEntry":1,
  "LineID":13 //and so on to all the other elements

私はMVC2を使用しています

4

1 に答える 1

1

ASP.NET MVC 2 は、そのままでは JSON 要求をサポートしていません。この機能は ASP.NET MVC 3 に組み込まれていますJsonValueProviderFactory。それを実現するカスタムを作成することもできます。Phil Haack は、このトピックに関する優れたブログ投稿を書きました。リクエストヘッダーを設定できるようにするには、$.ajax代わりにPhil が示すように使用する必要もあります。$.postapplication/jsonContent-Type

をダウンロードJsonValueProviderFactoryしてアプリケーションに登録すると、次のことが可能になります。

$('#testeFA').click(function() {
    <% JavaScriptSerializer serializador = new JavaScriptSerializer(); %>
    //"apontamentos" is the name of the List<ApontamentoModel>
    var models = <%= serializador.Serialize(apontamentos) %>;
    $.ajax({
        url: '<%= Url.Action("GeraFA") %>',
        type: 'post',
        contentType: 'application/json;charset=utf-8',
        data: JSON.stringify({ models: models }),
        success: function(result) {
            //do whatever
        }
    });
});

またJSON.stringify、javascriptmodels変数を JSON 文字列に変換し、contentTypeパラメーターで指定されたとおりにサーバーに送信するメソッドの使用法にも注意してください。このメソッドは、最新のすべてのブラウザーにネイティブに組み込まれています。一部のレガシー ブラウザーをサポートする必要がある場合は、json2.jsスクリプトをページに含めることができます。

于 2012-06-15T18:59:55.423 に答える