2017-02-24 2 views
6

シナリオ:渡すデータ

コントローラにサブオブジェクトのリストを含むオブジェクトを渡す必要があります。

問題:

私は、オブジェクトの値ではなく、オブジェクト内のサブオブジェクトのリストの値を取得することができますよ。

コード:

index.cshtml

function sendData() { 
    var student = { 
     Id: 1, 
     Name: "xxx", 
     Marks: [{ 
      Subject: "Maths", 
      Mark:80 
     }, 
     { 
      Subject: "Science", 
      Mark: 75 
     }] 
    } 
    $.ajax({ 
     url: '@Url.Action("Receive", "Home")', 
     data: student, 
     success: function (data) { 
      alert("done"); 
     }, 
     error: function (error) { 
      alert('error For details refer console log'); 
      console.log(error); 
     } 
    }); 
} 

HomeController.cs

public ActionResult Receive(Student student) 
    { 
     ViewBag.Message = "Your contact page."; 
     return View(); 
    } 

Student.cs

public class Student 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Marks> Marks { get; set; } 
} 
public class Marks 
{ 
    public string Subject { get; set; } 
    public decimal Mark { get; set; } 
} 

スクリーンショット:

クロームデバッガは、すべてのデータが設定されたことを示します。

enter image description here

が、コントローラに、私は任意の助けをいただければ幸いですマークス

enter image description here

の値を取得していませんよ。ありがとうございました。

答えて

5

データを文字列化し、contentTypetype ajaxオプションを設定する必要があります(POSTが必要であることに注意してください。そうでなければ、ドット表記の完全修飾プロパティ名を使用してデータを生成する必要があります。その既存のAjaxコードを変更せずに動作します。その場合には例{ Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 80, ... }、)あなたの方法は、ビューを返していますが、そのビューで何もしていない

var student = { 
    .... 
}; 

$.ajax({ 
    url: '@Url.Action("Receive", "Home")', 
    data: JSON.stringify({ student: student }, // stringify 
    type: 'POST', // add 
    contentType: "application/json; charset=utf-8", //add 
    success: function (data) { 
     alert("done"); 
    }, 
    .... 
}); 

注意。そのビューでDOMを更新する場合は、メソッドはreturn PartialView(...);で、ajax成功コールバックでは

success: function (data) { 
    $(someElement).html(data); 
}, 
+0

ありがとう@Stephenです。完璧に動作します。ちょうど興味深い、なぜそれがGETメソッドで動作していないのですか? –

+1

GET呼び出しには本体がなく、その値はクエリ文字列(またはルート値)から来ており、 'DefaultModelBinder'は送信するデータと一致しません(理解するために生成したURLを見てください)。 –

+1

しかし、データが最初の段落のコメントに従って書式設定されている場合、つまり、名前がC#コードのプロパティの値にアクセスするのと同じ形式になっていれば機能します。 –