Привязка модели ASP.NET MVC3 при редактировании - PullRequest
2 голосов
/ 23 февраля 2011

В последние несколько лет я работаю над своим пятым или около того веб-приложением ASP.NET MVC, и до сих пор не нашел хорошего способа взять данные, представленные в форме редактирования / обновления, и сохранить их в базе данных.эффективно при использовании ORM, таких как Linq to SQL или Entity Framework.

Просто чтобы прояснить, проблема в том, что с действием Create вы можете взять объект в качестве параметра:

public ActionResult Create(QuestionGroup newGroup)

С действием Edit объект должен быть связан с ORM иобновленный, а не созданный с нуля, как это сделает ModelBinder.

Я всегда решал эту проблему одним из двух способов: либо я буду вручную обновлять каждое свойство объекта (одна строка кода на свойство), либо янапишет метод, который использует отражение, чтобы найти каждое свойство, чтобы обновить его, и скопирует значение.

Я чувствую уверенный , что к настоящему времени в версии 3 MVC существует благословен способ сделать это лучше, но я не могу его найти!В чем секрет, чтобы сделать это проще и изящнее ??

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Я обнаружил, что вы также можете делать следующее с Entity Framework. У него есть плюсы и минусы против другого варианта, но он должен работать так же, как и предыдущий ответ:

[HttpPost]
public ActionResult Edit(QuestionGroup updatedGroup)
{
    try
    {
        context.QuestionGroups.Attach(updatedGroup);
        context.ObjectStateManager.ChangeObjectState(updatedGroup, System.Data.EntityState.Modified);

        ValidateModel(updatedGroup);

        if (this.ModelState.IsValid)
        {
            context.SaveChanges();
            return RedirectToAction("Index");
        }
    }
    catch
    {
    }

    return View();
}
2 голосов
/ 23 февраля 2011

Ну, это смущает ... есть метод Controller.UpdateModel с несколькими перегрузками, который сделает свое дело.Я искал в интернете привет и низко, только чтобы случайно найти ответ с IntelliSense сразу после публикации вопроса.

...