2012-02-24 9 views
0

MVC 3 EFモデルの最初のプロジェクトに編集機能を追加しようとしています。リストがあり、ユーザがQuestionsの行を編集できるとします。MVC;私のコントローラのエラーメッセージHTTPOSTアクションの編集

私の実体は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; } 

これはbasicly編集のために私のコードであると私は値を変更し、それを提出しようとすると、私はこのERORを得る:

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

私はこのエラーをcasuses何見当もつかない? :S

ありがとうございます!

答えて

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); 
} 
関連する問題