我正在使用viewmodel,它是Fruit和Category表的组合,其名称是FruitCatergory(viewmodel)。我可以成功添加和检索两列的数据。问题是当我点击编辑链接时,它显示错误 {“无效的对象名称'dbo.FruitCatergory'。”}
水果
分类
我想只编辑已发布的日期为空的行
// GET: FrutiCategorys/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
FruitCategory fruitCategory = db.Fruit.Find(id);
// FruitCategory fruitCategory = (from c in db.Category join f in db.Fruit on c.CategoryId equals f.CategoryId where (f.ReleasedDate == null) select e).FirstOrDefault( s => s.FruitId.Equals(id));
{
return HttpNotFound();
}
ViewBag.RankId = new SelectList(db.Category, "CategoryId", "CategoryName", FrutiCategory.CategoryId);
return View(frutiCategory);
}
答案 0 :(得分:1)
您没有在问题中添加帖子操作,因此很难说出您的问题涉及的具体错误会发生什么。但是,根据你的行动中发生的事情,我可以猜一猜。
正如您所说, FruitCategory
是一种视图模型,这意味着它不会被持久化。要重新启动它,您需要分别映射来自Fruit
和Category
的值,而不是简单地对其进行映射。例如:
var fruit = db.Fruit.Include('Category').SingleOrDefault(m => m.Id == id);
if (fruit == null || fruit.Category == null)
{
return new HttpNotFoundResult();
}
var model = new FruitCategory
{
FruitName = fruit.FruitName,
...
CategoryName = fruit.Category.CategoryName,
...
};
return View(model);
同样,在您的帖子操作中,您不能简单地将FruitCategory
保存为Fruit
,而是需要将值重新映射到数据库中的实例:
if (ModelState.IsValid)
{
var fruit = db.Fruit.Include('Category').SingleOrDefault(m => m.Id == id);
if (fruit == null)
{
return new HttpNotFoundResult();
}
fruit.FruitName = model.FruitName;
...
fruit.Category.CategoryName = model.CategoryName;
...
db.Entry(fruit).State = EntityState.Modified;
db.SaveChanges();
}
return View(model);
答案 1 :(得分:0)
您是否为您的FrutiCategory类定义了绑定表?如果没有,它会将类名视为表名。
另外......你检查过这个拼写错误吗?
return View(frutiCategory);