3

MVC 3でJavascript配列をコントローラーに渡すのに非常に問題があります。null値を取得し続け、配列を渡すすべての方法を試したように感じます。以下は、JavaScript、およびに関連するビューモデルQuestionsとコントローラーの署名です。助けていただければ幸いです。JavaScriptでエラーが発生していません。基本的なものが欠けているに違いないと思います。

idとの値はresponse-id、コントローラーで正しく受信されています。

javascript

$("#form-submit-scores").submit(function () {

        var question = [],
        var item = [],

        $('.questionRow').each(function (index) {
            question[index] = new Array();
            var fullQuestionId = $(this).attr('id');
            var fullQuestionParts = fullQuestionId.split('-');
            question[index].QuestionId = fullQuestionParts[fullQuestionParts.length - 1];
            question[index].QuestionScore = $('.scoreBoard').val();
        });

        $('.itemRow').each(function (index) {
            item[index] = new Array();
            item[index].ItemId = $(this).attr('id');
            item[index].ItemScore = $('.scoreBoard').val();
        });

        var url = "/ctr/SaveResponse",
            data = {
                Id: $('#id').val(),
                ResponseId: $('#response-id').val(),
                Questions: question,
                Items : item
            },

        if (isSubmitScores) {
            url = "/ctr/SubmitResponse"
        }

        $.ajax({
            url: url,
            type: 'Post',
            data: data,
            traditional:true,
            datatype: "json",
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                if (!result.Success) {

....
....
....

ビューモデル

public class SubmitResponseViewModel
    {
        public int Id { get; set; }
        public int ResponseId { get; set; }
        IEnumerable<SubmitResponseScoresQuestionViewModel> Questions {get;set;}
        IEnumerable<SubmitResponseScoresItemViewModel> Items { get; set; }
    }



public class SubmitResponseScoresQuestionViewModel
    {
        public int QuestionId { get; set; }
        public decimal? QuestionScore { get; set; }
    }

コントローラの署名

public JsonResult SubmitResponseScores(SubmitResponseScoresViewModel model)

したがって、上で述べたように、私のモデルには、との正しい値が含まれていますが、Idとのresponse-idヌル値が含まれQuestionsていますItems。AJAX呼び出しでデータが入力されていることを確認したdataので、コントローラーに適切な形式でデータを提供していないと思います。

編集:1

Chrome JSデバッガー:AJAXデータオブジェクト

  JSON.stringify(data, null, 2)
"{
  "Id": "1027",
  "ResponseId": "26",
  "Questions": [
    {
      "QuestionId": "7",
      "QuestionScore": "0"
    },
    {
      "QuestionId": "2",
      "QuestionScore": "0"
    },
    {
      "QuestionId": "1",
      "QuestionScore": "0"
    }
  ],
  "Items": [
    {
      "ItemId": "434",
      "ItemScore": "0"
    }
  ]
}"
4

2 に答える 2

3

JSON.stringify を使用して配列を JSON にシリアル化したい
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

1)NugetにJson.netをインストールして、JsonFilter表記を含めます

PM> Install-Package Newtonsoft.Json

2) アクション メソッドに Json Filter アノテーションを配置する

[JsonFilter(Param = "attributes", JsonDataType = typeof(AttributeViewModel[]))]
  JsonResult SubmitResponseScores(SubmitResponseScoresViewModel model)

3) あなたの ajax 呼び出しで:

    data:  JSON.stringify(data), 
于 2013-02-04T18:07:20.057 に答える
0

質問とアイテムのコレクションは公開する必要があります。そうしないと、ポストバック時にモデルにバインドされません

于 2013-03-12T13:51:25.657 に答える