我是 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 => model.Teaching 而不是 model.Teaching.Id 但是一个 Teaching 条目被传递给 PostData 我猜他不知道如何将纯 int 转换为一个对象。
任何帮助表示赞赏,感谢您的阅读并提前感谢!