2012-04-30 3 views
0

をコントローラへのJavaScript + Ajaxで配列を送信:MVC - 私はこの(すべてのコードを投稿していない、唯一の関連)のようにそれをやっている私はMVCコントローラ に座標を持つ配列を送信しようとしている

私は、他のデータが正しく解析され、コントローラのアクションは、私が期待したモデルがこの

ようになります デバッグする場合
var coords = []; 
..for loop 
    coords.push({ X: x, Y: y}); 
..end of loop 

その後、私はちょうどデータ

var data = { 
    OtherData: "SomeString", 
    OtherData2: 1, 
    Coords: coords 
}; 

として次のオブジェクトとのAJAX呼び出しを行います文字列が 値としてXとYの値を送信する - - プロパティ としてXとYとクラス単純なポイントを作る - リスト を使用して - 1つの文字列として連結XとYの値を送信し、私はすでに を試してみました何

public class Model 
{ 
    public int OtherData2 { get; set; } 
    public string OtherData { get; set; } 
    public Point[] Coords { get; set; } 
} 

文字列のリストを受け取る

ポイントオブジェクトの配列では、同じ量の点を持つリストを取得しますが、それらはすべてListオブジェクトですべて空です(リストはnullです)。 あなたは何ができるか

たぶん重要な注意点は、DefaultModelBinderは、(それが適切な型コンバータを欠けている)
、リストにバインドする方法を知らないように、私はMVC4

答えて

0

を使用していることに見えるということです されますそれに独自のポイントと型コンバーターを作成します。

[TypeConverter(typeof(PointTypeConverter))] 
public class Point 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 
} 

/// <summary> 
/// we need this so we can use the DefaultModelBinder to bind to List<Point> 
/// example at http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx 
/// </summary> 
public class PointTypeConverter : TypeConverter 
{ 
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) 
    { 
     return true; 
    } 

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     Point ret = serializer.Deserialize<Point>((string)value); 
     return ret; 
    } 

} 

コントローラのアクションは、次のようになります。

[HttpPost] 
public ActionResult testPoints(List<Point> cords) 
{ 
    //party 
} 

とAjaxは次のように呼び出す:

$.ajax({ 
url: "/Home/testPoints/", 
type: "POST", 
data: { 
      //note that i stringify very value in the array by itself 
    cords: [JSON.stringify({'X':1,'Y':2}),JSON.stringify({'X':3,'Y':4})] 
}, 
success: function (data) 
{ 
    //client party 
} 
}); 

はMVC3でこのすべてをテストし、そしてそれは、これが

+0

感謝を助けMVC4 希望に動作しません理由はない、私は私自身のModelBinderを作る知っていましたか、 ConverterClassはオプションでしたが、私はそのオプションが嫌いでした。おそらく唯一の正しい解決策、おかげで、ありがとう。 – YentheO

関連する問題