MVC; Сообщение об ошибке при редактировании действия моего контроллера HTTPOST - PullRequest
0 голосов
/ 24 февраля 2012

Я работаю над добавлением функции редактирования в мой первый проект модели MVC 3 EF. Существует список, и пользователь должен иметь возможность редактировать строку Questions.

Мои объектыQuestions, CoreVaue и SubjectType, CoreValue и SubjectType имеют отношение многие ко многим к Question.

Примечание. Не допускайте, чтобы имя CreateViewModel вводило вас в заблуждение, я использую его в Create иУдалить просмотры.:)

Это мое действие GET внутри моего Controller:

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

Это моеДействие POST внутри моего Controller:

 [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.

Понятия не имею, что вызывает эту ошибку?: S

Заранее спасибо!

1 Ответ

1 голос
/ 24 февраля 2012

В 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...