2

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と呼ばれる FK がありAutorIdます。しかし、私は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]ている場合、 is nullであるため false になります。だから私はそれを取り出さなければなりません。AutormodelState.IsValidlivro.Autor

しかし、私は Julia Lerman の「Programming EF Code-First」という本を読んでいましたが、[Required]属性を持つナビゲーション プロパティがある場合があります。

ここで何が欠けていますか?

4

1 に答える 1

0

これはおそらく、View がLivroではなくフィールドのみを参照しAutor、モデル バインダーがAutorナビゲーション プロパティを作成できないためです。Autor次のように smth を使用して、 のフィールドを作成できます。

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

ただし、これは面倒で、リストから著者を選択するだけでよい場合もあります。Required属性をLivro.AutorIDプロパティにのみ追加し、そのままAutorにしておきます。

于 2013-01-31T23:54:54.353 に答える