2012-07-21 35 views
2

的内部列表我有一个对象更新使用MongoDB的

public class Object1{ 
public List<Object2> {get;set;} 
} 


public class Object2{ 
public Name{get;set;} 
public Address{get;set;} 
} 

我有一个功能,用户可以只更新一个对象2的实例。所以我保存Object2的代码看起来像

[HttpPost] 
public ActionResult SaveObject2(Object2 obj2) 
{ 
    if (obj2.Id == null){ 
     //Add Logic 
     obj1.Obj2List.Add(obj2) 
    } 
    else{ 
     // Update logic 
    } 
} 

但是obj2.Id从来不是null.Id是ObjectId类型。我如何检查逻辑,看看是否需要插入或更新?我正在使用官方的C#驱动程序使用asp.net MVC 3和Mongo DB。

感谢

回答

2

ObjectId类型是一个结构,而不是一类 - 所以它永远不会是null。请改为检查ObjectId.Empty

但有一点要小心:我想你要在请求之间的某个隐藏字段中存储Object2的id。如果是这种情况,请注意恶意用户可以使用HTTP代理(如Fiddler)轻松更改ID,从而欺骗您相信Object2正在更新而不是添加。

根据您尝试做的内容,我建议执行一些额外的检查以更可靠地确定您是否应该插入或更新您的对象。

+0

谢谢!你是正确的,我使用隐藏字段来存储Id.How否则我可以实现这个功能,如果我不使用隐藏字段? – user636525 2012-07-21 18:47:31

+1

@ user636525试试看看这个SO问题:http://stackoverflow.com/questions/10497126/how-to-pass-sensitive-data-from-view-to-controller。它包含许多有用的提示。 – 2012-07-21 18:56:18

+0

我想知道其他人如何在ASP.Net MVC世界中传递id!我读了史蒂夫桑德森的书,并且从书中的样本中获得了将id作为隐藏字段的想法。 – user636525 2012-07-21 19:06:34