在MVC3中处理创建和更新复杂数据类型的最佳方法是什么?

时间:2011-11-04 21:41:49

标签: c# asp.net asp.net-mvc-3 entity-framework ef-code-first

好的我已经试图找出最好的方法来做几天,但仍然没有得到一个非常优雅的答案所以我希望有人可以指出我在右边方向或给予一些同行评审:))

基本上我有3个类(它们不同,比这些更复杂):

public class Person
{
    int ID { get; set;}
    string Name { get; set; }
    virtual IEnumerable<Place> { get; set; }

}

public class Place
{
    int ID { get; set;}
    string Name { get; set; }
    virtual IEnumerable<Thing> { get; set; }
}

public class Thing
{
    int ID { get; set;}
    string Name { get; set; }
    virtual IEnumerable<Place> { get; set; }
    virtual int PersonID { get; set; }
}

所以基本上你有Person个,有很多Place个,可以有多个Thing s,它们也可以出现在多个Places中(试图减少拥有存储Thing s)的重复项,但仅限于Person

设置ViewModel来处理此问题的最佳方法是什么?我应该使用Ajax和Json(我一直在做什么)自己创建所有内容,还是有办法在ViewModel中处理这种类型的关系并将单个帖子发送回服务器?

目前,我正在执行以下操作:

填写Person表单 - &gt; ajax保存到服务器,获取Person ID

填写Place表单(包括Person&#39; s ID) - &gt; ajax保存到服务器,获取Place ID

在分隔字符串中填写Thing表单(包括Person IDPlace ID

我知道应该有一种更简单的方法可以做到这一点,因为它有点笨重,但因为它的所有查询字符串我都无法弄清楚

2 个答案:

答案 0 :(得分:2)

我回答了一个类似的问题,关于如何使用接口和部分视图来处理它。

How to create Asp.Net MVC 3 view model

答案 1 :(得分:2)

你说“有点笨重”,但我认为如果你可以使用AJAX / JSON实时在表单上构建一个对象图,那可能会更轻量级,可能与RESTful API有关,就像你描述的那样。 / p>

另一种方法是使用脚本(jQuery,JSMVC,Knockout)来构建表单并立即POST整个sucker。我必须在某些情况下执行此操作,在这些情况下,在提交整个图之前,不应保留任何数据。这里的技巧是了解ModelBinder以及它如何为您构建/更新该图。

如果这就是您的要求,我可以扩展ModelBinder处理复杂对象图和集合的关键点。