在asp.net mvc3中更新View(来自sql server)

时间:2011-04-21 11:25:12

标签: asp.net-mvc-3

我使用我在MS SQL Server中创建的几个表中的信息显示(sql)视图中的数据。收集的数据使用实体框架显示在asp.net mvc3站点的强类型视图中。

创建编辑页面时,所有内容都按预期显示,当我尝试保存修改后的详细信息时,这些内容无法正常工作。

页面构建

一些代码

显示编辑页面的方法

public ActionResult Edit(Guid id)
{
    return View(db.ViewIndividualAlls.Where(x => x.UserGuid == id).SingleOrDefault());
}

接收HttpPost的方法

[HttpPost]
public ActionResult Edit(Guid id, ViewIndividualAll viewIndividualAll)
{
    // Ind confirmed in the debugger, it works!
    var ind = db.ViewIndividualAlls.Where(x => x.UserGuid == id).SingleOrDefault();
    //var ind = db.ViewIndividualAlls.Find(viewIndividualAll);
    try
    {
        if (TryUpdateModel(ind))
        {
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            ViewData["error"] = "Model validation failed!";
            return View(viewIndividualAll);
        } 
    }
    catch (Exception e)
    {
        ViewData["error"] = string.Concat(e.Message, " ", e.StackTrace);
        return View(viewIndividualAll);
    }
}

错误消息

The property 'whatever' is part of the object's key information and cannot be modified.

有点奇怪,因为我能够在sql server管理工作室中更新任何东西,当然除了与外键绑定的东西。

任何建议(相关)都将不胜感激

谢谢!

更新

我检查了模型浏览器中的主键,发现它们都设置错误,所以我修复了它。现在当我修复我得到这个新错误

Unable to update the EntitySet 'ViewIndividualAll' because it has a DefiningQuery 
and no <UpdateFunction> element exists in the <ModificationFunctionMapping> 
element to support the current operation.

所以没有快乐,更多的修复,但仍然对帮助感兴趣!

2 个答案:

答案 0 :(得分:1)

从它的外观来看,你正在使用Guid作为关键。实体框架因Guids而变得混乱。 您得到的错误可能是因为TryUpdateModel(ind)触及了Guid值。 您应该使用[ScaffoldColumn(false)]标记Guid密钥(不确定这是否有帮助),或者手动将提交的字段从数据库复制到您的实体。

答案 1 :(得分:0)

解决

[HttpPost]
public ActionResult Edit(Guid id, ViewIndividualAll viewIndividualAll)
{
    var ind = db.ViewIndividualAlls.Find(id);
    try
    {
        if (TryUpdateModel(ind))
        {
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            ViewData["error"] = "Model validation failed!";
            return View(viewIndividualAll);
        } 
    }
    catch (Exception e)
    {
        ViewData["error"] = string.Concat(e.Message, " ", e.StackTrace, "\n", e.InnerException, "\n", e.HelpLink);
        return View(viewIndividualAll);
    }
}