Monorail无法读取从jQuery接收的JSON(对象列表)数据

本文关键字:JSON 对象 列表 数据 读取 jQuery Monorail | 更新日期: 2023-09-27 18:00:03

我有以下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'
            });

我将其发送到Monorail 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#viewmodel类:

 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
        }

它给我的回应是:

消息:生成方法参数时出错。最后分析的参数为值为"的新订单

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 2 extraArgs)C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-9c93ac''MR2''src''Castle.Monorail.Framework''SmartDispatcherController.cs:line80 atCastle.MonoRail.Framework.ActionMethodExecutiorCompatible.Execute(IEngineContextengineContext、IController控制器、IContrlerContext上下文)C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-9c93ac''MR2''src''Castle.Monorail.Framework''ActionMethodExecutior.cs:line79在Castle.MonoRail.Framework.Controller.RunActionAndRenderView()在里面C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-98c93ac''MR2''src''Castle.Monorail.Framework''Controller.cs:line 1639

内部异常:ArgumentNullException

消息:值不能为null。参数名称:s

StackTrace:位于System.IO.StringReader.ctor(字符串s)Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings设置)Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型)在Castle.MonoRail.Framework.Services.NewtonsoftJSONSerializer.Deserialize(字符串jsonString,Type expectedType)C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-98c93ac''MR2''src''Castle.Monorail.Framework''Services''NewtonsoftJSONSerializer.cs:line100 atCastle.MonoRail.Framework.JSONBinderAttribute.Bind(IEngineContext上下文,IController控制器,IContrlerContext控制器上下文,ParameterInfo ParameterInfo)C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-9c93ac''MR2''src''Castle.Monorail.Framework''Attributes''JSONBinderAttribute.cs:line135 atCastle.MonoRail.Framework.SmartDispatcherController.BuildMethodArguments(ParameterInfo[]参数,IRequest请求,IDictionary `2 actionArgs)C: ''Dropbox''Projects''Monorail''castleproject-Monorail-98c93ac''castleproject-Monorail-9c93ac''MR2''src''Castle.Monorail.Framework''SmartDispatcherController.cs:line288

我确信我的映射和视图模型类是正确的。JQuery确实发送了预期的json对象,但Monorail似乎在转换它时遇到了问题。这可能是一个错误吗?

编辑:单轨电车在这里没有错。。。我在帖子中写的东西毕竟是一个JSON。使用此库后:https://code.google.com/p/jquery-json/,我设法将对象转换为JSON。我认为选择dataType:"json"就足够了,但显然还不够。

Monorail无法读取从jQuery接收的JSON(对象列表)数据

$.ajax调用中的datatype选项指的是所需的数据。你需要做的是:
$.ajax({
  url: "/Photos/SetOrder",  
  contentType: 'application/json; charset=utf-8',
  data: JSON.stringify({neworder:orderState}),
  type: 'POST'
});