将带有动态json对象的模型传递给MVC控制器
本文关键字:MVC 控制器 模型 动态 json 对象 | 更新日期: 2023-09-27 18:25:30
我在javascript:中有一个这样的模型
function SomeModel()
{
this.Id = ko.observable();
this.Name = ko.observable();
this.MetaData = {};
}
然后我需要把它发送到MVC,这样我就可以把它保存在mongodb中,但是我不知道如何最好地把元数据存储在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对象并填充它,但它似乎只存储1层数据,所以如果我要回发:
...,
MetaData: {
something: {
one: 1,
two: 2
}
},
...
我最终会为元数据字段创建expando对象,因为我知道something
字段,但不会在第一次遍历下面存储任何数据,所以除了将其转换为要存储的json字符串之外,还有什么方法可以存储上面的数据吗?
由于似乎没有可靠的答案,我只需要在jquery ajax中做一个额外的步骤,将所有"元数据"字段转换为json字符串,然后将其作为字符串存储在服务器上。
然后,如果我需要访问或更改数据,我使用返回动态的web助手Json.Encode/Decode
,然后我可以添加子元素,我这样做:
- 简单包含json对象的匿名类型
- 数组元素的列表
然后我只是再次对其进行编码,将动态作为一个对象。