分析 JSON 对象以通过 ajax 将参数传递到 C# MVC3 控制器中的泛型列表

本文关键字:控制器 MVC3 列表 泛型 参数传递 对象 JSON ajax 分析 | 更新日期: 2023-09-27 18:32:00

我有一点jquery代码:

     //foreach the inputs
         json.push({
                 Var1: $(this).attr("id"),
                 Var2: filename,
                 Var3: hash_name
              });
      //end foreach
      $.post(url, {test: json}, function(){}, 'json');

我们假设 json 有 3 个对象(在浏览 3 个输入并获取它们的值之后)。 以及 MVC3 模型中的结构:

public struct Simple
   {
      public string Var1 {
         get;
         set;
      }
      public string Var2{
         get;
         set;
      }
      public string Var3{
         get;
         set;
      }
      public bool Var4 {
         get;
         set;
      }
   }

和控制器:

 [HttpPost]
 public ActionResult Test( List<Simple> test) {
   ...
 }

List<Simple>返回 3 个元素(此处是正确的),但所有属性的值均为空(Var4 除外,该值为 false)。

为什么?

分析 JSON 对象以通过 ajax 将参数传递到 C# MVC3 控制器中的泛型列表

如果你要做的是模型绑定,那么还需要做更多的工作。但是,如果您只是想要服务器端的json数组,那么这里有一个快速的技巧。下载System.Json(您可以通过NuGet完成)。在客户端不要发送 JSON 对象,因为这需要完全不同的方法。而是事先将其串起来

    $(document).ready(function () {
        var json = [
            {
                Name: "John Doe",
                Age: 34
            }];
        var str = JSON.stringify(json);
        console.log(str);
        $.ajax({
            url: '/mycontroller/LoadJson',
            data: { values: str },
            type: 'POST',                
            success: function (data) {                   
              //do something
            }
        });
    });

在服务器端,您可以使用 JsonValue.Parse 作为动态对象(然后您可以将其"翻译"为自定义对象之一)

    [HttpPost]
    public ActionResult LoadJson(FormCollection collection)
    {
        dynamic values = JsonValue.Parse(collection["values"]);       
        for(int i = 0; i < values.Count; i++)
        {
            var _output = string.Format("My name is {0} and I'm {1} of age", values[i].Name, values[i].Age);
            Console.WriteLine(_output);
        }
        return RedirectToAction("Index");
    }

这是一篇关于动态 Json 解析的较长文章http://www.west-wind.com/weblog/posts/2012/Mar/19/Dynamic-JSON-Parsing-in-NET-with-JsonValue

希望这有帮助

名称应该是这样的(Json 键值)

test[0].Var1
test[0].Var2
test[0].Var3
test[1].Var1
.....
Or
[0].Var1
[0].Var2
[0].Var3
......

服务器无法关联每个对象的属性是什么的想法,所以数字仅用于分组

Var4是假的,因为模型绑定器用它的默认值实例化了它,它没有从表单中读取任何值


前任

爪哇语

json.push({
                 'test[0].Var1': $(this).attr("id"),
                 'test[0].Var1': filename,
                 'test[0].Var1': hash_name
              });

应递增每个对象的0

JavaScript 中test的名称必须与操作方法的参数名称匹配