【发布时间】:2014-04-27 18:09:37
【问题描述】:
伙计们,我已经在 MVC4 和 MVC5 上尝试过。
我需要将一个带有一些属性的对象和一个集合从客户端传递给控制器。
我在 C# 中将模型定义为:
public enum RequestMode { ReadOnly = 0, Edit = 1}
public class DataRequest
{
public int ProjectId { get; set; }
public RequestMode Mode { get; set; }
public List<PageRequest> PageRequests { get; set; }
public DataRequest()
{
PageRequests = new List<PageRequest>();
}
}
public class PageRequest
{
public int Id { get; set; }
public int PageCurrent { get; set; }
public int RowCountPerPage { get; set; }
}
MVC 控制器定义为(只是使用它设置断点来检查请求值):
[HttpPost]
public JsonResult Test(DataRequest request)
{
return new JsonResult();
}
Index.cshtml 客户端包含 ajax 调用:
<script type="text/javascript">
var RequestMode = { ReadOnly: 0, Edit: 1 };
var dataRequest = { ProjectId: 17, Mode: RequestMode.Edit, PageRequests: new Array() };
var pageRequest = { TableId: 3165, PageCurrent: 4, RowCountPerPage: 30 };
dataRequest.PageRequests.push(pageRequest);
$(document).ready(function () {
$.ajax({
data: dataRequest,
type: 'POST',
cache: false,
url: '/Home/Test',
success: function (data) {
},
fail: function (data) {
}
});
});
</script>
我开始调试,页面加载,控制器测试方法中的断点被命中。
在调试器中,请求对象显示为: 模式:编辑 页面请求:计数 = 1 项目编号:17
当我展开 PageRequests 集合属性时,我看到: {Mvc5WebTest.Controllers.PageRequest} 编号:0 当前页面:0 每页行数:0
我希望 PageRequest 对象填充我设置的值(即 3165、4、30)
使用 Fiddler,我看到完整的 DataRequest 对象正在正确地转换为 Json,但似乎 MVC 控制器无法将其转换回 C# 对象。
作为一种解决方法,我可以将客户端上的 ajax 调用修改为 var cdr = JSON.stringify(dataRequest);
$.ajax({
dataType: 'json',
type: 'GET',
data: { jsonRequest: cdr },
...
然后在控制器中
[HttpGet]
public ActionResult Test(string jsonRequest)
{
var request = JsonConvert.DeserializeObject<DataRequest>(jsonRequest);
return new JsonResult();
}
这可行,但我不想将数据作为字符串传递。
任何人都可以阐明发生了什么以及我需要做什么来填充集合吗?
【问题讨论】:
-
请务必阅读选择标签时出现的说明!
标签: jquery asp.net-mvc json asp.net-mvc-5