viewmodel

时间:2016-06-16 07:09:43

标签: asp.net-mvc

我正在使用viewmodel,它是Fruit和Category表的组合,其名称是FruitCatergory(viewmodel)。我可以成功添加和检索两列的数据。问题是当我点击编辑链接时,它显示错误 {“无效的对象名称'dbo.FruitCatergory'。”}

水果

  • FruitId(PK)
  • FruitName
  • ReleasedDate
  • CategoryId(FK)

分类

  • CategoryId(PK)
  • 类别名称

我想只编辑已发布的日期为空的行

// 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);
    }

2 个答案:

答案 0 :(得分:1)

您没有在问题中添加帖子操作,因此很难说出您的问题涉及的具体错误会发生什么。但是,根据你的行动中发生的事情,我可以猜一猜。

正如您所说,

FruitCategory是一种视图模型,这意味着它不会被持久化。要重新启动它,您需要分别映射来自FruitCategory的值,而不是简单地对其进行映射。例如:

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