实体类定义:   
 public class TableModel
    {
        public int Id { get; set; }
        public int Number { get; set; }
        public int SeatCount { get; set; } //座位数量        public TableCategoryModel Category { get; set; } //桌位分类
        public StatusDictionaryModel Status { get; set; } //记录桌位的状态
    }控制器:
        [HttpPost]
        public ActionResult TableAdd(TableModel model)
        {
            TableModel m = null;
            if (ModelState.IsValid)
            {
                m = bllTable.AddTable(model);
            }            return Json(m);
        }
参数直接借用TableModel,模型实体具有导航属性,这样老是,前天传入的json对象,反序列化为TableModel对象时,导航实体的属性为null.
是不是这样是不可行的,也是没必要的?
我不想重新封装一个类,只接收分类Id,而不是导航实体的这样的一个对象类,直接借用这个实体类方式不可以吗?还是压根就不应该这样使用。
前台:
        //添加桌位
        function addTableToDB() {
            var table_number = $.trim($("#dlg input[name=table_number]").val());
            var table_seats = $.trim($("#dlg input[name=table_seats]").val());
            var table_category_id = $("#table_category").combobox("getValue");
            var table_status_id = $("#table_status").combobox("getValue");            var model = {
                Number: table_number,
                SeatCount: table_seats,
                Category: getTableCategory(table_category_id),
                Status: getTableStatus(table_status_id)
            };            $.ajax({
                url: "/Table/TableAdd",
                type: "POST",
                data: model,
                dataType: "json",
                success: function (req) {
                    $("#dlg").dialog("close");
                    alert("操作成功!");
                }
            });
        }

解决方案 »

  1.   

    var model = {
                    Number: table_number,
                    SeatCount: table_seats,
                    Category: getTableCategory(table_category_id),
                    Status: getTableStatus(table_status_id)
                };
    你这个东东传到控制器只会解析成4个参数啊
    你那个接收方法没见过
    不能那么用的
      

  2.   


    后面那个调用方法返回的都是对象,json数据是嵌套的,对应反序列化的导航属性。
      

  3.   

    我现在又想到一个处理方法,就是ajax请求,不传对象,传一个json字符串,控制器也不接收实体,改成接收字符串,这样在控制器里面通过JSONDeseriable()什么的反序列化尸体对象。
      

  4.   

    我再说得清楚一点吧:
    var model = {
                    Number: 12,
                    SeatCount: 4,
                    Category: {Id:123,Name:"雅间"},
                    Status:{Id:3,Name="可用"}
                };
    类似这样的,chrome调试数据是有的
      

  5.   

    你是嵌套的类,断点调试能进入到Controller的方法里面吗?
      

  6.   

    断点能进,简单类型的字段没问题,就实体类型的属性null
      

  7.   

    那就建议换种方式,另一种类型以Json字符串传过去,然后到控制器里在反json一下。
      

  8.   

    换个方式吧看样。
    搜了下overflow上,找到了Model Binder的绑定复杂类型的内容,还得看那个,我还是先用现有知识解决吧,谢了。
      

  9.   

    content-type:text/json 用json格式传吧.  你那个有问题 也应该是在 路由那里。
      

  10.   

    换了也不行,感觉就是DefaultModelBinder无法正确反序列化。
      

  11.   

                    data: JSON.stringify(model),
                    contentType: "application/json",可以了,该结贴了。
      

  12.   

    http://stackoverflow.com/questions/10110482/asp-net-mvc-3-posting-complex-json-model-to-action