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"
}
]
}"