我试图将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();
}
答案 0 :(得分:0)
让我们假设您有两个实体Post
和Category
,其中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
,而Category
随CategoryId
一起创建新的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);
}