2013-01-31 53 views
2

我学习asp.net的MVC与代码第一次....导航属性可以有[必须]属性吗?

我有一个叫这份绿皮书类:

这里的代码

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); 
    } 

如果我对Autor属性[Required],该modelState.IsValid变成假的,因为livro.Autor。所以我必须把它拿出来。

但是我从Julia Lerman那里读到一本叫做“编程EF代码优先”的书, 有时候还有导航属性[Required]属性。

我在这里失踪了什么?

回答

0

这可能是因为视图仅指的是Livro字段,而不是Autor,并且模型联编程序无法创建导航属性Autor。您可以为Autor创建领域,使用水木清华这样的:

@Html.TextBoxFor(m => m.Autor.AutorID); 
@Html.TextBoxFor(m => m.Autor.AutorName); 

然而,这将成为痛苦,也许你只需要从列表中选择作者。我只会将Required属性添加到Livro.AutorID属性中,并按原样保留Autor