ASP.NET MVC4创建具有导航属性的新模型

时间:2012-10-25 14:45:59

标签: asp.net asp.net-mvc-4

我是ASP.NET的新手,我正在努力实现以下目标:

我正在开发使用MVC4和代码优先的EF方法,我有以下模型:

public class Booking {
  // Lot of standard int/string attributes

  // And a navigation attribute
  public virtual Teaching teaching {get;set;}
}

教学是另一种非常基本的模式。我使用初始化程序引导了我的数据库,一切都很好,EF创建了我的SQL结构并自动将Teaching_Id添加到Booking表中。我的模型也正确填充(我猜是延迟加载),我可以在我的索引视图中打印model.Teaching.name。

我现在正在制作一个创建表单,将新的预订添加到我的数据库中,我希望用户能够从列表中选择一个教学。到目前为止,我设法实现了这一点,我的观点非常标准(自动生成):

 <div class="editor-label">
        @Html.LabelFor(model => model.BookingDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.BookingDate)
        @Html.ValidationMessageFor(model => model.BookingDate)
    </div>

到目前为止的简单属性。我为选择列表

做了这个

在我的控制器中:

var id = (int)Membership.GetUser().ProviderUserKey;
ViewBag.listTeachings = db.Teachings.Where(x => x.Teacher.UserId == id).ToList();

在我看来(在表格内)

 @Html.DropDownListFor(model => model.Teaching.Id, new SelectList(ViewBag.listTeachings, "Id", "Id"))

(出于测试目的,我在下拉列表中引用了Id)

当我发布表单时,一切正常(没有模型状态错误)但数据库中没有添加任何内容。在我的表单POST内容中,我有一个Teachings.Id条目。我也尝试使用DropDownListFor model =&gt; model.Teaching而不是model.Teaching.Id但是教学条目传递给PostData,我猜他不知道如何将纯int转换为对象。

感谢任何帮助,感谢您的阅读和感谢提前!

1 个答案:

答案 0 :(得分:0)

好的,所以我在Create()函数中传递的模型实际上包含了Teaching.Id,但似乎EF无法将它映射到好的外键或其他任何东西。

我在POST Create控制器中使用此解决方案使其工作:

 model.Teaching = teachingRepo.Find(model.Teaching.Id);

注意到这不起作用:

 model.Teaching = new Teaching() { Id = model.Teaching.Id }

(如果有人对此有解释我不反对)