Trong MVC3, có thể tự động liên kết các đối tượng javascript với các mô hình nếu mô hình có các đối tượng lồng nhau không? Mô hình của tôi trông như thế này:Mô hình JSON MVC3 JSON ràng buộc với lớp lồng nhau
public class Tweet
{
public Tweet()
{
Coordinates = new Geo();
}
public string Id { get; set; }
public string User { get; set; }
public DateTime Created { get; set; }
public string Text { get; set; }
public Geo Coordinates { get; set; }
}
public class Geo {
public Geo(){}
public Geo(double? lat, double? lng)
{
this.Latitude = lat;
this.Longitude = lng;
}
public double? Latitude { get; set; }
public double? Longitude { get; set; }
public bool HasValue
{
get
{
return (Latitude != null || Longitude != null);
}
}
}
Khi tôi đăng JSON sau vào tất cả mọi thứ điều khiển của tôi ngoại trừ "Tọa độ" liên kết thành công:
{"Text":"test","Id":"testid","User":"testuser","Created":"","Coordinates":{"Latitude":57.69679752892457,"Longitude":11.982091465576104}}
Đây là những gì hành động điều khiển của tôi trông giống như:
[HttpPost]
public JsonResult ReTweet(Tweet tweet)
{
//do some stuff
}
Tôi có thiếu gì đó ở đây hay tính năng tự động ràng buộc mới chỉ hỗ trợ các đối tượng nguyên thủy?
Loại bỏ giá trị rỗng thực sự hiệu quả nhưng làm hỏng mô hình vì gửi giá trị trống sẽ dẫn đến 0 là giá trị lat/lng hợp lệ. Đoán cách duy nhất là tự deserialize json của tôi. – jul
Tôi chỉ nhận thấy rằng nếu tôi đặt các giá trị trong dấu ngoặc kép, nó liên kết tốt với các thuộc tính không có giá trị. Chắc chắn đây phải là một lỗi? – jul
@jul: bạn nói đúng. Tôi đã làm một số thử nghiệm cố gắng ràng buộc hành động của bạn bằng cách sử dụng một mô hình tùy chỉnh chất kết dính (ActionResult InsertTweet ([ModelBinder (typeof (TweetModelBinder))] Models.Tweet tweet)) và các giá trị ở đó, trong DictionaryValueProvider. – LeftyX