DropDownList值作为外键插入数据库

时间:2019-01-09 16:43:53

标签: asp.net asp.net-mvc asp.net-mvc-scaffolding

我试图将traciVehicle->getAcceleration()插入表TraCIDemo11p.cc中,但是我的代码创建的是新类别,而不是使用下拉列表中的选定值。

我开始学习ASP.NET MVC,所以我不知道该如何解决。我可以从下拉列表中获取真实值,但是当插入查询运行时,将插入一个新类别并将其归因于插入。

categoryID

查看代码:

Post

发布模型:

public ActionResult Create([Bind(Include = "PostID,Text,CategoryID")] Posts posts)
{
    if (ModelState.IsValid)
    {
        int CategoryID = Convert.ToInt32(Request["CategoryID"]);
        posts.Category = new Categories { CategoryID = CategoryID };
        db.Posts.Add(posts);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(posts);
}

public ActionResult Create()
{
    ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "Name");
    return View();
}

2 个答案:

答案 0 :(得分:0)

让我们假设您有两个实体PostCategory,其中Category可以有许多Posts,即实体Post的属性为{{1} }。然后,当您为插入/更新构建新的CategoryId实体时,您需要设置Post,即

CategoryId

例如,您可以通过post.CategoryId = your_value_from_dropdown; 获得所需的类别,

CategoryID

,然后通过var category = db.Category.Where(x => x.CategoryId == your_value_from_dropdown).FirstOrDefault(); 之类的导航属性为post设置此类别,然后进行插入或更新。

答案 1 :(得分:0)

首先按如下所示编写您的Post模型类:

public class Post
{
    [Key]
    public int PostId {get; set;}

    public string Text {get; set;}

    [ForeignKey("Category")]
    public int CategoryID {get; set;}

    public Category Category {get; set;}
}

看您的Create post方法,问题似乎出在以下两行:

int CategoryID = Convert.ToInt32(Request["CategoryID"]);
posts.Category = new Categories { CategoryID = CategoryID };

删除这两行代码!您不需要将Category分配给Post,而CategoryCategoryId一起创建新的Post。使您的Create post方法保持如下简单,并且应该可以正常工作。

public ActionResult Create([Bind(Include = "PostID,Text,CategoryID")] Posts posts)
{
    if (ModelState.IsValid)
    {
        db.Posts.Add(posts);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(posts);
}