我正在使用Code First学习asp.net mvc ....
我有一个名为Livro的课程:
这是代码
public class Livro
{
[Key]
public int LivroId { get; set; }
[Required(ErrorMessage = "E necessario titulo")]
[MaxLength(100, ErrorMessage = "Titulo deve ter no maximo 100 caracteres")]
public string Titulo { get; set; }
public int AutorID { get; set; }
public virtual Autor Autor { get; set; }
}
如您所见,它有一个名为Autor
的导航属性和名为AutorId
的FK。但我在Livro
控制器上有这个代码(我没有写这个代码,VS根据我的类创建)。
[HttpPost]
public ActionResult Create(Livro livro)
{
if (ModelState.IsValid)
{
db.Livros.Add(livro);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.AutorID = new SelectList(db.Autores, "AutorId", "Nome", livro.AutorID);
return View(livro);
}
如果我在[Required]
属性上有Autor
,则modelState.IsValid
会变为false,因为livro.Autor
null 。所以我必须把它拿出来。
但我正在读Julia Lerman的一本书,称其为“编程EF Code-First”和
有时候会有[Required]
属性的导航属性。
我在这里缺少什么?
答案 0 :(得分:0)
这可能是因为View仅引用Livro
字段,而不是Autor
,并且模型绑定器无法创建Autor
导航属性。您可以使用这样的smth为Autor
创建字段:
@Html.TextBoxFor(m => m.Autor.AutorID);
@Html.TextBoxFor(m => m.Autor.AutorName);
然而,这将变得很痛苦,也许你只需要从列表中选择作者。我只会将Required
属性添加到Livro.AutorID
属性,并按原样保留Autor
。