0

私は今MVC 3(コードファースト)を学んでいます.asp.netの素晴らしいチュートリアルとstackoverflowに関するいくつかの質問のおかげで多くのことを学びましたが、何かを理解することはできません. デフォルト値を設定しようとしています。誰かが質問をするとき、その質問のステータスはデフォルトで 3 (= 未回答) でなければなりません。この投稿のおかげで、なんとか設定できました:asp.net mvcビューモデルのデフォルト値 ですが、今は多対多の関係に対して同じことをしようとしています。(QuestionModel public virtual ICollection カテゴリ内)

誰かがこれについて私を助けることができますか?

これは私の QuestionModel (Question.cs) です。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace MvcDatabase.Models
{
    public class Question
    {
        [Key]
        public int QuestionID { get; set; }

        [DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
        [Display(Name="Datum")]
        public DateTime Date { get; set; }

        [Required(ErrorMessage="Naam is een verplicht veld.")]
        [MaxLength(100, ErrorMessage="Naam kan maximum 100 karakters bevatten")]
        [Display(Name="Naam")]
        public string Author { get; set; }

        [Required(ErrorMessage="E-mail is een verplicht veld.")]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email")]
        public string MailAuthor { get; set; }

        [Required(ErrorMessage="Onderwerp is een verplicht veld.")]
        [MaxLength(100, ErrorMessage="Onderwerp kan maximum 100 karakters bevatten.")]
        [Display(Name="Onderwerp")]
        public string Title { get; set; }

        [Required(ErrorMessage="Bericht is een verplicht veld.")]
        [Display(Name="Bericht")]
        public string Message { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
        public virtual ICollection<Reaction> Reactions { get; set; }

        [ForeignKey("Status")]
        public int StatusID { get; set; }
        public virtual Status Status { get; set; }

        public Question()
        {
            StatusID = 3;
        }
    }
}

これは、CategoryModel (Category.cs) です。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace MvcDatabase.Models
{
    public class Category
    {
        [Key]
        public int CategoryID { get; set; }

        [Required(ErrorMessage="Omschrijving is een verplicht veld.")]
        [MaxLength(100, ErrorMessage = "Omschrijving kan maximum 100 karakters bevatten.")]
        [Display(Name="Categorie omschrijving")]
        public string Description { get; set; }

        public virtual ICollection<Question> Questions { get; set; }
    }
}

これが DbContextModel (TestotheekDBContext.cs) です。

using System.Data.Entity;

namespace MvcDatabase.Models
{
    public class TestotheekDBContext: DbContext
    {
        public DbSet<Status> Statuses { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<Employee> Employees { get; set; }
        public DbSet<Reaction> Reactions { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Question>()
                .HasMany(qc => qc.Categories)
                .WithMany(cq => cq.Questions)
                .Map(m => m.MapLeftKey("QuestionID")
                    .MapRightKey("CategoryID")
                    .ToTable("QuestionsWithCategory"));
        }
    }
}

コントローラーでコードが必要な場合

        public ActionResult Create()
        {
            return View(new Question());
        } 

        //
        // POST: /Default4/Create

        [HttpPost]
        public ActionResult Create(Question question)
        {
            var vraag = new Question();
            vraag.Date = DateTime.Now;
            vraag.Author = question.Author;
            vraag.MailAuthor = question.MailAuthor;
            vraag.Title = question.Title;
            vraag.Message = question.Message;

            if(ModelState.IsValid)
            {
                db.Questions.Add(vraag);
                db.SaveChanges();
                return RedirectToAction("Index","Home");
            }
            return View(question);
        }

(戻り RedirectToAction をテストしていません)

編集

これは私が現在得ている結果です: ここに画像の説明を入力 最初のセクション (最初のテーブル) の最後の質問でわかるように、カテゴリはありません (フィールドは空です) これは、そのテーブルの他のすべての質問と同じでなければなりません。管理者が 1 つ (または複数) を割り当てる必要があるためです。

4

2 に答える 2

0

したがって、答えは Saintedlame が言ったこととはまったく異なりますが、彼は確かに正しい方法で私を指摘しました。まず、デバッグ後、行 var vraag = new Question() が役に立たないことがわかりました。日付とカテゴリを追加するだけでした。繰り返しますが、サンテドラに感謝します!

これは実際の ActionResult です:

        [HttpPost]
        public ActionResult Create(Question question)
        {
            question.Date = DateTime.Now;
            if (question.Categories == null) 
            {
                var category = db.Categories
                    .Include(q => q.Questions)
                    .Where(q => q.CategoryID == 1)
                    .ToList();
                question.Categories = category;
            }

            if(ModelState.IsValid)
            {
                db.Questions.Add(question);
                db.SaveChanges();
                return RedirectToAction("Index","Home");
            }
            return View(question);
        }

結果は次のとおりです。

ここに画像の説明を入力

于 2013-02-23T12:27:27.770 に答える