3

これは、エンティティ フレームワーク 5 と asp.net mvc4 codefirst で使用している関連する列挙型を含む私のモデルです。ポータブル データベース ファイル (.mdf) も使用しています。

public class Project
    {
        public Project()
        {
            Images = new List<ProjectImage>();
        }

        public int ProjectId { get; set; }
        [Required]
        public string Title { get; set; }
        public virtual ICollection<ProjectImage> Images { get; set; }
        public string Description { get; set; }
        public ProjectType Type { get; set; }
        public ProjectState State { get; set; }
    }

    public enum ProjectType
    {
        Phone,
        Web,
        Windows
    }

    public enum ProjectState : byte
    {
        InProgress,
        NotStarted,
        Done
    }

ビューからモデルをポストバックした後、列挙フィールドを除くすべてのフィールドがデータベースに適切に保存されます。それらは保存されますが、ビューで異なる値を選択した後でも、各列挙型の最初の値のみが保存されます。

編集を保存しようとしましたが、同じことが起こります。

create post メソッドの最初からステップ実行しましたが、コンテキストで savechanges を呼び出した後はすべて問題ないように見えますが、インデックス ページにリダイレクトすると、enum の初期値として enum プロパティ値が表示されます (つまり、最初の enum 値)

私の作成および編集方法は以下のとおりです。バグではないことを願っていますが、これで数日間髪を引っ張っているので助けてください. コードファーストと列挙型を一緒に始めたばかりです。ありがとう。

Create post メソッド

[HttpPost]
        public ActionResult Create(Project project, HttpPostedFileBase file)
        {
            try
            {
                if (file != null && file.ContentLength > 0 && file.ContentType.Contains("image"))
                {
                    //create a new unique filename with using guid, filename and project title
                    string relativePath = Constants.PortfolioImagesBaseFolder + 
                                        project.Title.Replace(" ", "") + 
                                        Guid.NewGuid().ToString() +
                                        Path.GetFileName(file.FileName);

                    string absolutePath = Server.MapPath(relativePath);

                    //save the file
                    file.SaveAs(absolutePath);

                    if (ModelState.IsValid)
                    {
                        project.Images.Add(new ProjectImage()
                        {
                            IsProjectMainImage = true,
                            Url = relativePath,
                            Title = "Main Project Image"
                        });
                        context.Projects.Add(project);
                        context.SaveChanges();

                        return RedirectToAction("Index");
                    }
                }

                ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();

                ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();

                return RedirectToAction("Index");
            }

Edit Post メソッド

[HttpPost]
        public ActionResult Edit(int id, Project project)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //Project projectFromDb = context.Projects.Single(p => p.ProjectId == id);
                    //projectFromDb.State = project.State;
                    //projectFromDb.Type = project.Type;
                    //projectFromDb.Title = project.Title;
                    //projectFromDb.Description = project.Description;
                    EntityState entityState = context.Entry(project).State;
                    context.Entry(project).State = EntityState.Modified;
                    context.SaveChanges();
                    return RedirectToAction("Index");
                }

                ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();

                ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();

                return View(project);
            }

また、重複としてマークする前に、stackoverflow で多くの回答を調べましたが、誰も助けてくれませんでした。質問をする前に 2 日間待ちました。

4

1 に答える 1