私は次のjquery ajaxを持っています:
$(".gridster ul").gridster({
widget_margins: [5, 5],
widget_base_dimensions: [280, 280],
draggable: {
stop: function(event, ui){
var orderState = {
photos: $(".gridster ul").data("gridster").serialize(),
promoid: $.getUrlVar('promoId')
};
$.ajax({
url: "/Photos/SetOrder",
data: {neworder:orderState},
dataType: 'json',
type: 'POST'
});
これをモノレール 2.1 コントローラーに送信します。
JS の orderState オブジェクトは次のようになります。
neworder[photos][0][height]=1
neworder[photos][0][id]=98315
neworder[photos][0][width]=1
neworder[photos][0][x]=2
neworder[photos][0][y]=1
neworder[photos][1][height]=1
neworder[photos][1][id]=98316
neworder[photos][1][width]=1
neworder[photos][1][x]=1
neworder[photos][1][y]=1
neworder[photos][2][height]=1
neworder[photos][2][id]=98317
neworder[photos][2][width]=1
neworder[photos][2][x]=1
neworder[photos][2][y]=2
neworder[photos][3][height]=1
neworder[photos][3][id]=98318
neworder[photos][3][width]=1
neworder[photos][3][x]=1
neworder[photos][3][y]=3
neworder[promoid]=163844
そして、次の c# ビューモデル クラスにマップする必要があります。
public class OrderViewModel
{
public int height { get; set; }
public int width { get; set; }
public int x { get; set; }
public int y { get; set; }
public int id { get; set; }
}
public class NewPromoImageOrderViewModel
{
public NewPromoImageOrderViewModel()
{
Photos = new List<OrderViewModel>();
}
public int PromoId { get; set; }
public List<OrderViewModel> Photos { get; set; }
}
次のアクションで使用されます。
[return: JSONReturnBinder]
[AccessibleThrough(Verb.Post)]
public object SetOrder([JSONBinder("neworder")] NewPromoImageOrderViewModel neworder)
{
//bla
}
そして、それが私に与える応答はこれです:
メッセージ: メソッド引数の構築中にエラーが発生しました。分析された最後のパラメータは、値 '' の neworder でした
StackTrace: Castle.MonoRail.Framework.SmartDispatcherController.BuildMethodArguments(ParameterInfo[] パラメータ、IRequest リクエスト、IDictionary で
2 actionArgs) in C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\SmartDispatcherController.cs:line 329 at Castle.MonoRail.Framework.SmartDispatcherController.InvokeMethod(MethodInfo method, IRequest request, IDictionary
C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\SmartDispatcherController.cs:Castle.MonoRail.Framework.ActionMethodExecutorCompatible の 80 行目に 2 つの extraArgs) があります。 C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\ActionMethodExecutor.cs:line 79 の Execute(IEngineContext engineContext、IController controller、IControllerContext context) Castle.MonoRail.Framework.Controller.RunActionAndRenderView() in C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\Controller.cs:1639 行目内部例外: ArgumentNullException
メッセージ: 値を null にすることはできません。パラメータ名: s
StackTrace: System.IO.StringReader..ctor(String s) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type) at Castle .MonoRail.Framework.Services.NewtonsoftJSONSerializer.Deserialize(String jsonString, Type expectedType) in C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\Services \NewtonsoftJSONSerializer.cs: C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\castleproject-MonoRail- の Castle.MonoRail.Framework.JSONBinderAttribute.Bind(IEngineContext context, IController controller, IControllerContext controllerContext, ParameterInfo parameterInfo) の 100 行目98c93ac\MR2\src\Castle.MonoRail.Framework\Attributes\JSONBinderAttribute.cs: C:\Dropbox\Projects\Monorail\castleproject-MonoRail-98c93ac\ の Castle.MonoRail.Framework.SmartDispatcherController.BuildMethodArguments(ParameterInfo[] parameters, IRequest request, IDictionary`2 actionArgs) の 135 行目Castleproject-MonoRail-98c93ac\MR2\src\Castle.MonoRail.Framework\SmartDispatcherController.cs:288行目
私のマッピングとviewmodelクラスが正しいと確信しています。JQuery は期待される json オブジェクトを送信しますが、モノレールでは変換に問題があるようです。これはバグでしょうか?
編集:まあ、ここではモノレールに問題はありませんでした...私が投稿したものは、結局のところJSONでした。このライブラリを使用した後: https://code.google.com/p/jquery-json/、オブジェクトを JSON に変換することができました。dataType:"json" を選択すれば十分だと思っていましたが、どうやらそうではないようです。