2010-10-03 104 views
0

我有多个表都用外键链接回中心表。我希望能够在表2中创建一个新记录,但是我遇到了麻烦,因为我不知道如何创建表2的记录的新实例,同时引用它将绑定到的记录的ID。ASP.net MVC用外键创建表记录

实施例:

数据库:收集

表:收集 字段1:ID 字段2:命名

表:书 字段1:collectionId 字段2:ID 字段3 :名字

现在,我不想创建一本没有设置collectionID的书,但我不能弄清楚这应该如何分配在控制器/视图中。

Should Book应该有一个独立于Collection的控制器,还是Collection控制器应该有一个createBook方法,与它自己的create方法分开?

我想从集合详细信息视图中调用createBook方法(从它自己的控制器或集合控制器)。

当我调用Book的创建方法时,如何创建一个新的Book,该详细信息视图中列出的Collection项目的详细信息视图中的collectionId集实例化了这本书?

我应该指出,我为我的模型使用了实体框架,而且我绝对是新手。

感谢所有帮助

回答

1

尽量不要根据你的实体模型来创建/单独的控制器,创建/基于UI和URL路由将它们分开。

我猜你有一个叫做“CreateBook”的视图,它(有希望)绑定到一个强类型的“Book”实体。

当您提交表单时,您应该有一个控制器方法[HttpPost]

然后你就可以做到这一点提交书:

string bookName = Request.Form["Name"]; 
int collectionId = Request.Form["CollectionID"]; 

,或者通过将它作为一个强类型的模型:

public ActionResult CreateBook(Book book) { } 

然后你这样做:

Book newBook = new Book (book.Name, book.CollectionID); 
someDal.CreateBook(newBook); 

将模型导入EDMX时,请确保勾选了“在模型中包含外键”。

这样做是将“CollectionID”FK添加到Book实体,允许您绑定到此实体并在每个书籍模型上访问此属性。

有关强加类型的ASP.NET MVC Views的CRUD操作上有一篇非常好的文章here应该让你走上正轨。

HTH。

+0

非常感谢您的帮助! – 2010-10-03 23:04:15

+0

不用担心队友。 :) – RPM1984 2010-10-03 23:15:59

+0

所以,我理解这个例子,但如果我试图自动插入正确的集合id,没有出现在窗体上的那个元素,我该怎么做?所以,如果collectionDetailsView有一个链接到createNewBook,我该如何告诉[HttpPost] createNewBook方法它的collectionID是链接的来源? – 2010-10-03 23:17:19