MVC;我的Controller HTTP POST操作编辑上的错误消息

时间:2012-02-24 12:22:32

标签: asp.net-mvc asp.net-mvc-3 entity-framework

我正在为我的MVC 3 EF模型第一个项目添加一个编辑功能,有一个列表,用户可以编辑Questions行。

我的实体为QuestionsCoreVaue和SubjectType,CoreValueSubjectTypeQuestion有多对多关系。

注意:不要让CreateViewModel的名字让您感到困惑,我在创建和删除视图上使用它。 :)

这是我Controller中的GET操作:

public ActionResult Edit(int id)
{
    Question q = Arep.GetQuestionById(id);
    CreateViewModel model = new CreateViewModel();
    List<SubjectType> subjectypes = Arep.getallS();
    List<CoreValue> corevalues = Arep.getallC();
    model.SubjectTypes = new SelectList(subjectypes, "SID", "Sname");
    model.CoreValues = new SelectList(corevalues, "CID", "Cname");

    return View(model);
}

这是我AdminRepository中的方法:

   public Question GetQuestionById(int id)
    {
    return db.Question.SingleOrDefault(m => m.QID == id);
    }

   public void changequestion(Question question)
    {  
        db.ObjectStateManager.ChangeObjectState(question, EntityState.Modified); 
    }

    public List<SubjectType> getallS()
    {
        var Allsubjectypes = from SID in db.SubjectType
                             select SID;
        return Allsubjectypes.ToList();
    }

    public List<CoreValue> getallC()
    {
        var AllCorevalues = from CID in db.CoreValue
                            select CID;
        return AllCorevalues.ToList();
    }

这是我在Controller内的POST操作:

 [HttpPost, ActionName("Edit")]
public ActionResult EditConfirmed(CreateViewModel model)
{
    Question question = new Question();
    //question.QID = id;//test
    if (ModelState.IsValid)
    {
        Arep.changequestion(question);
        Arep.save();
        return RedirectToAction("Edit");
    }
    var CoreValueID = int.Parse(model.Cname);
    var SubjectTypeID = int.Parse(model.Sname);
    var getallC = Arep.getbycid(CoreValueID);
    var getallS = Arep.getbysid(SubjectTypeID);



     return View(model);
}

这是我的CreateViwModel:

public string QuestionText { get; set; }
public string Cname { get; set; }
public string Sname { get; set; }

public SelectList SubjectTypes { get; set; }
public SelectList CoreValues { get; set; }

这基本上是我的编辑代码,当我尝试更改值并提交时,我得到了这个错误:

Current Object State Manager contains no Object Stat Entry that references an object of type NKI3.Models.Question.

我不知道casuse这个错误是什么? :S

提前致谢!

1 个答案:

答案 0 :(得分:1)

在EditConfirmed中,我想你想得到一个现有问题,而不是创建一个新问题。 ObjectContext不会跟踪新问题。

[HttpPost, ActionName("Edit")]
public ActionResult EditConfirmed(CreateViewModel model)
{
    Question question = new Question(); // I think you want to get a existing question here
    //question.QID = id;//test
    if (ModelState.IsValid)
    {
        Arep.changequestion(question);
        Arep.save();
        return RedirectToAction("Edit");
    }
    var CoreValueID = int.Parse(model.Cname);
    var SubjectTypeID = int.Parse(model.Sname);
    var getallC = Arep.getbycid(CoreValueID);
    var getallS = Arep.getbysid(SubjectTypeID);



     return View(model);
}