关于asp.net mvc的疑问?

xcf007 2013-06-25 10:10:14
实体类定义:
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("操作成功!");
}
});
}
...全文
236 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xcf007 2013-06-27
  • 打赏
  • 举报
回复
引用 13 楼 yumen3501 的回复:
content-type:text/json 用json格式传吧. 你那个有问题 也应该是在 路由那里。
换了也不行,感觉就是DefaultModelBinder无法正确反序列化。
xcf007 2013-06-27
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/10110482/asp-net-mvc-3-posting-complex-json-model-to-action
xcf007 2013-06-27
  • 打赏
  • 举报
回复
data: JSON.stringify(model), contentType: "application/json", 可以了,该结贴了。
Assassin_ 2013-06-26
  • 打赏
  • 举报
回复
content-type:text/json 用json格式传吧. 你那个有问题 也应该是在 路由那里。
天府荣城 2013-06-26
  • 打赏
  • 举报
回复
呵呵,楼主,是否可以借贴了?
xcf007 2013-06-25
  • 打赏
  • 举报
回复
换个方式吧看样。 搜了下overflow上,找到了Model Binder的绑定复杂类型的内容,还得看那个,我还是先用现有知识解决吧,谢了。
天府荣城 2013-06-25
  • 打赏
  • 举报
回复
那就建议换种方式,另一种类型以Json字符串传过去,然后到控制器里在反json一下。
xcf007 2013-06-25
  • 打赏
  • 举报
回复
xcf007 2013-06-25
  • 打赏
  • 举报
回复
xcf007 2013-06-25
  • 打赏
  • 举报
回复
引用 6 楼 songbb123 的回复:
你是嵌套的类,断点调试能进入到Controller的方法里面吗?
断点能进,简单类型的字段没问题,就实体类型的属性null
天府荣城 2013-06-25
  • 打赏
  • 举报
回复
你是嵌套的类,断点调试能进入到Controller的方法里面吗?
xcf007 2013-06-25
  • 打赏
  • 举报
回复
我再说得清楚一点吧: var model = { Number: 12, SeatCount: 4, Category: {Id:123,Name:"雅间"}, Status:{Id:3,Name="可用"} }; 类似这样的,chrome调试数据是有的
xcf007 2013-06-25
  • 打赏
  • 举报
回复
我现在又想到一个处理方法,就是ajax请求,不传对象,传一个json字符串,控制器也不接收实体,改成接收字符串,这样在控制器里面通过JSONDeseriable()什么的反序列化尸体对象。
xcf007 2013-06-25
  • 打赏
  • 举报
回复
引用 1 楼 a407121393 的回复:
var model = {
                Number: table_number,
                SeatCount: table_seats,
                Category: getTableCategory(table_category_id),
                Status: getTableStatus(table_status_id)
            };
你这个东东传到控制器只会解析成4个参数啊 你那个接收方法没见过 不能那么用的
后面那个调用方法返回的都是对象,json数据是嵌套的,对应反序列化的导航属性。
天府荣城 2013-06-25
  • 打赏
  • 举报
回复
建议用下浏览器的调试功能,跟踪一下你传过去的参数值,到底是什么。
饕餮123 2013-06-25
  • 打赏
  • 举报
回复
var model = {
                Number: table_number,
                SeatCount: table_seats,
                Category: getTableCategory(table_category_id),
                Status: getTableStatus(table_status_id)
            };
你这个东东传到控制器只会解析成4个参数啊 你那个接收方法没见过 不能那么用的

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧