2016-10-31 3 views
-1

私はフォームを提出し、EFを使用してデータを保存しますが、提出時にすべてのフィールドが正しく記入されても、条件付きでinvalidと入力されます。他のフィールドが記入されている場合は0と表示されているIdの列と関係があると思います。c#mvcとEF - 無効なモデルが返されます

ページのデータモデル:

public class PagesVM 
{ 

    public PagesVM() 
    { 
    } 

    public PagesVM(PagesDTO pagesDTO) 
    { 
     Id = pagesDTO.Id; 
     Title = pagesDTO.Title; 
     Slug = pagesDTO.Slug; 
     Body = pagesDTO.Body; 
    } 

    public int Id { get; set; } 
    [Required] 
    [StringLength(50, MinimumLength = 3)] 
    public string Title { get; set; } 
    [Required] 
    [StringLength(50, MinimumLength = 3)] 
    public string Slug { get; set; } 
    [Required] 
    [StringLength(100, MinimumLength = 3)] 
    public string Body { get; set; } 
} 

POSTアクション:

[HttpPost] 
[ActionName("add-page")] 
public ActionResult AddPage(PagesVM pagesVM) 
{ 
    if (! ModelState.IsValid) 
    { 
     return View("AddPage", pagesVM); 
    } 

    using (Db db = new Db()) 
    { 
     PagesDTO pagesDTO = new PagesDTO(); 
     pagesDTO.Title = pagesVM.Title; 
     pagesDTO.Slug = pagesVM.Slug; 
     pagesDTO.Body = pagesVM.Body; 

     db.SaveChanges(); 
    } 

    ViewBag.SM = "You have added a new page!"; 

    return View("AddPage"); 
} 

そうにかかわらず、フォームは、それが常にif (! ModelState.IsValid)になり、正しく記入されている場合。 IDがまだ設定されていない場合

+0

内部

@Html.HiddenFor(x => x.Id) 

でそれを配置する必要がありを通じて来ていない場合は

!あなたの見解では、あなたのIDのためのHTMLエディタを生成し、それを見えなくする必要があります...それは奇妙に聞こえますが、私を信じて、おそらく最も効率的な方法です。 –

+0

でも、私は価値のために置くべきものは何ですか?それはdbのオートインクリメントになっています。 – frc

+0

追加時にプライマリキーを指定するように自動調整されない場合は、待機します。 –

答えて

0

あなたはデータを正確に表現し、検証に合格するためのモデルのために

public int? Id {get;set;} 

public int Id { get; set; } 

を変更する必要があります。それは、常にこのビューの前に設定して、フォームタグもちろん

関連する問題