【问题标题】:Passing model with dynamic json object to MVC controller将带有动态 json 对象的模型传递给 MVC 控制器
【发布时间】:2013-08-06 20:28:04
【问题描述】:

我在 javascript 中有一个这样的模型:

function SomeModel()
{
   this.Id = ko.observable();
   this.Name = ko.observable();
   this.MetaData = {};
}

然后我需要将它发送到 MVC,以便我可以将它保存在 mongodb 中,但是我不知道如何最好地将 MetaData 存储在 C# 表示中......因为模型看起来像:

public class SomeModel
{
   public Guid Id {get;set;}
   public string Name {get;set;}
   public object MetaData {get;set;}
}

但是它不喜欢将 json 对象绑定到对象,我不确定我是否应该使用 ExpandoObject 或其他东西,因为我对访问 c# mvc 服务中的数据并不那么大惊小怪,它只是为了前端的插件可以将自己的数据存储在对象上以供以后使用。所以一个例子可能是:

var someModel = new SomeModel();
someModel.MetaData.Bookmarks = [];
someModel.MetaData.Bookmarks.push({ location: 120, document: 23003032 });

所以它可以包含任何东西和子对象,就像我说的,我只需要将它塞进一个对象中,就像 Mongo 的传输机制一样,这将把它保存为它的无模式。

目前来自 JS 的模型通过 Jquery 通过 ajax 发送,并在控制器中自动绑定,然后发送到存储库。

== 编辑 ==

我用 MVC4 做了一些小测试,我可以在我的模型中放置一个 expando 对象并填充它,但是它似乎只存储一层数据,所以如果我要回发:

...,
MetaData: {
   something: {
       one: 1,
       two: 2 
   }
},
...

我最终会得到 MetaData 字段的 expando 对象,知道 something 字段,但不会存储第一次遍历下面的任何数据,所以除了将其转换为之外,还有什么方法可以存储上面的数据要存储的一串json?

【问题讨论】:

    标签: c# ajax asp.net-mvc json model-binding


    【解决方案1】:

    由于似乎没有可靠的答案,我只需要在 jquery ajax 中做一个额外的步骤,将所有“元数据”字段转换为 json 字符串,然后将其作为字符串存储在服务器上。

    然后,如果我需要访问或更改数据,我会使用返回动态的网络帮助程序 Json.Encode/Decode,然后我可以添加子元素,如下所示:

    • 简单包含的 json 对象的匿名类型
    • 数组元素列表

    然后我再次对其进行编码,将动态转换为对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多