如何在MVC集合中读取序列化数据(通过Jquery POST发送)

时间:2014-06-23 09:52:15

标签: javascript model-view-controller collections

我有一个表单和一个提交按钮单击,我序列化我的表单并将其发送到MVC操作。

Jquery代码

           var formCollection = $('form').serialize();
           var path = $(this).attr('data-content-url');              

           // check if no more error 
               $.ajax({
                   type: 'POST',
                   url: path,
                   cache: false,
                   data: { collection: formCollection },
                   datatype: 'json',
                   success: function (data) {
                       // do stuff
                   }
               });

MVC方

    [HttpPost]
    public ActionResult MethodName( FormCollection collection )
    {
    }

我确实将我的集合变量中的数据序列化为

name=test&id=1 as collection[0]

如何打破此集合[0],以便可以将此nameid直接分配给类参数,例如

Person p = new person { collection["name"], collection["id"] }

非常感谢

2 个答案:

答案 0 :(得分:1)

这个工作,创建一个新的帮助器类,它可以像往常期望的那样在formcollection中转换序列化数据

private FormCollection DeSerialize(FormCollection form)
{
  FormCollection collection = new FormCollection();
  //un-encode, and add spaces back in
  string querystring = Uri.UnescapeDataString(form[0]).Replace("+", " ");
  var split = querystring.Split(new [] {'&'}, StringSplitOptions.RemoveEmptyEntries);
  Dictionary<string, string> items = new Dictionary<string, string>();      
  foreach (string s in split)
  {        
    string text = s.Substring(0, s.IndexOf("="));
    string value = s.Substring(s.IndexOf("=")+1);

    if (items.Keys.Contains(text))
      items[text] = items[text] + "," + value;
    else
     items.Add(text, value);
   }
   foreach (var i in items)
 {
   collection.Add(i.Key, i.Value);
 }            
   return collection;
 }

答案 1 :(得分:0)

您需要使用模型进行反序列化

试试这个

var response = JsonConvert.DeserializeObject<YourModel>(collection);

var name = response.name ;
var id  = response.id;

使用foreach循环,从列表中获取更多记录