关于JSON和序列化的问题

我有一个强类型视图,我的viewmodel包含一个对象Person和一个技能列表。 人是非常直截了当的。 我使用像这样的Html Helpers @Html.TextBoxFor(m => m.Person.FirstName) 。 我提交表格并得到我想要的东西。

问题是我的技能清单。

通过AJAX调用,我得到一个JSON结果,这是一个技能数组。

我应该如何将技能和人员的组合发送到我的HTTPPOST方法?

我看到两种可能性。

  1. 我喜欢的,但不知道如何以正确的方式实现:以某种方式设法将此JSON结果放入我的viewmodel( List skilllist )并使用标准的提交按钮并在我的HTTPPOST方法中接收它。 (见内联评论)

     [HttpPost] public ActionResult RegisterPersonAndSkills(PersonSkillViewModel model) { // I can acces the Person object and its properties string firstname = model.Person.FirstName; // It would be awesome if I could access the list which used to be a JSONresult string skillname = model.SkillList[0].SkillName return null; } 
  2. 尝试转换,将表单中的所有内容(Person对象部分)序列化为JSON结果,将我拥有的json结果数组插入到序列化的viewmodel中,并通过modelbinding方式接收模型。 与上面的post方法结果相同。 我不知道如何实现这个以及如何处理可能的validation问题。 将Person的每个属性序列化为JSON并将Person对象和技能数组添加到JSON PersonSkillViewModel似乎需要做很多工作。

你怎么解决这个问题?

或者只是不可能将两个结果都放在一个参数中?

实现所需结果#1的最简单方法是通过隐藏字段客户端将您在AJAX调用中收到的技能数组添加到DOM。 你将不得不使用默认模型绑定器使用的命名约定(我没有VS打开,但如果你在GET方法上填充你的技能数组并为每个添加一个Html.HiddenFor <>你应该看到语法。)

所以基本上你需要一些JS来处理JSON请求客户端并将它添加到DOM …这只是Jquery的几行,但你没有提到你是如何得到技能数组Ajax请求的。