Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC 3在多对多关系(iCollection)上设置默认值_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc MVC 3在多对多关系(iCollection)上设置默认值

Asp.net mvc MVC 3在多对多关系(iCollection)上设置默认值,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我现在正在学习MVC 3(代码优先),多亏了asp.net上的一些优秀教程和stackoverflow上的一些问题,我学到了很多东西,但我想不出什么。我正在尝试设置一个默认值。当有人提问时,默认情况下该问题的状态必须为3(=未回答)。多亏了这篇文章,我成功地设置了一个: 但现在我正试图为一段多对多的关系做同样的事情。(在QuestionModel公共虚拟ICollection类别中) 有人能帮我解决这个问题吗 这是我的问题模型(Question.cs) (尚未测试返回重定向操作) 编辑 这是我目

我现在正在学习MVC 3(代码优先),多亏了asp.net上的一些优秀教程和stackoverflow上的一些问题,我学到了很多东西,但我想不出什么。我正在尝试设置一个默认值。当有人提问时,默认情况下该问题的状态必须为3(=未回答)。多亏了这篇文章,我成功地设置了一个: 但现在我正试图为一段多对多的关系做同样的事情。(在QuestionModel公共虚拟ICollection类别中)

有人能帮我解决这个问题吗

这是我的问题模型(Question.cs)

(尚未测试返回重定向操作)

编辑

这是我目前得到的结果:
正如您在第一部分(第一个表)的最后一个问题中所看到的,没有类别(字段为空),这必须与该表中的所有其他问题相同没有类别,因为管理员必须分配一个(或多个)。

您需要将db上下文中的现有类别附加到您的实体。在控制器中执行此操作通常不是一个好主意(垃圾收集器、不存在实体上的异常)。我会在你的控制器创建操作中这样做

 [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;

     // Add the default categories here!
     vraag.Categories = db.Categories.Where(c => c.SomeCriteria).ToList();

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

     return  View(question);
 }

所以答案并不完全是圣特拉姆所说的,但他确实给了我正确的方向。首先,在调试之后,我发现行var vraag=new Question()是无用的,因为几乎所有的问题都是有问题的。我只需要添加日期和类别。再次感谢你,圣徒瘸子

这是实际行动的结果:

        [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);
        }
结果如下:


提交问题的人不允许选择类别。(这不是你通过附加激励类别而变成的吗?)。这就是为什么我需要一个默认值1(CategoryID=1)。
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);
        }
 [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;

     // Add the default categories here!
     vraag.Categories = db.Categories.Where(c => c.SomeCriteria).ToList();

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

     return  View(question);
 }
        [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);
        }