关于JSON和序列化的问题

时间:2011-07-23 12:50:15

标签: jquery asp.net-mvc json asp.net-mvc-3 model-binding

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

问题在于我的技能清单。

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

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

我看到两种可能性。

  1. 我赞成的,但不知道如何以正确的方式实现:以某种方式设法将此JSON结果导入我的viewmodel(List<Skill> 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方法结果相同。我不知道如何实现这个以及如何处理可能的验证问题。将Person的每个属性序列化为JSON并将Person对象和技能数组添加到JSON PersonSkillViewModel似乎需要做很多工作。

  3. 你会如何解决这个问题?

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

1 个答案:

答案 0 :(得分:2)

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

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