Быстрый вопрос относительно обновления списка элементов в asp.net mvc.ASP.NET MVC Обновление списка объектов в одной форме? (привязка модели к списку)
В основном у меня есть метод действия редактирования, который возвращает коллекцию объектов (кстати, структура таблицы выглядит следующим образом: «testID, assetID, Result» - таблица ссылок).
Я в основном хочу, чтобы эти элементы отображались один за другим в форме и чтобы их редактировать. Форма должна быть отправлена назад, а модель-блендер делает свою магию. Но, это не так просто.
Я очистил сеть, и, похоже, большая часть информации об этом материале кажется немного устаревшей. Я столкнулся с this post, который не был обновлен в течение длительного времени и this one, который, кажется, предполагает, что вы не должны привязываться к уже существующему списку для обновления и что есть проблемы при работе с EF или Linq to Sql (который я есть).
Есть ли простой способ достичь того, что я хочу? Изменено ли состояние привязки к модели списка в версии выпуска?
ОБНОВЛЕНИЕ - Чуть ближе ...
Вот мой метод Edit:
public ActionResult EditSurveyResults(Guid id)
{
var results = surveyRepository.GetSurveyResults(id);
return PartialView("EditSurveyResults", results);
}
И моя форма:
<div id="editSurveyResults">
<h2>
EditSurveryResults</h2>
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm())
{%>
<fieldset>
<legend>Results</legend>
<% int i = 0; foreach (var result in Model)
{ %>
<input type="hidden" name='results[<%= i %>].TestID' value='<%= result.TestID %>' />
<input type="hidden" name='results[<%= i %>].AssetID' value='<%= result.AssetID %>' />
<p>
<%= result.Task.TaskName%>
</p>
<p>
<label for="Result">
Result:</label>
<input type="text" name='results[<%= i %>].Result' value='<%= result.Result %>' />
<%= Html.ValidationMessage("Result", "*")%>
</p>
<% i++; } %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
И мой метод редактирования POST:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditSurveyResults(Guid id, IList<SurveyTestResult> results)
{
var oldValues = surveyRepository.GetSurveyResults(id);
if (ModelState.IsValid)
{
UpdateModel(oldValues);
surveyRepository.Save();
return Content("Done");
}
else
return PartialView("EditSurveyResults");
}
Это не полный, конечно, но он ничего не обновляет в своем текущем состоянии. Я пропустил трюк здесь? результаты заселяются обновленными объектами, поэтому я не уверен, почему его не обновляет ...
ОБНОВЛЕНИЕ 2: Итак, я начинаю думать, что модель не подходит для этого. Итак, я прибегал к тому, чтобы делать вещи более взбешенным образом. Если кто-нибудь может обнаружить проблему с этим, пожалуйста, дайте мне знать. FYI - эта форма будет захвачена AJAX, поэтому я не верну взгляд, а просто сообщение. Вот новый код:
IList<SurveyTestResult> oldValues = surveyRepository.GetSurveyResults(id).ToList();
foreach (var result in SurveyTestResult)
{
//SurveyTestResult is the IList that comes down from the form.
SurveyTestResult thisone = oldValues.Single(p => p.AssetID == result.AssetID &&
p.TestID == result.TestID);
//update the old entity with the result from the new one
thisone.Result = result.Result;
}
А потом я вызываю Сохранить в моем хранилище.
Заранее спасибо
Я сейчас на этапе, когда я возвращаю Model Binder со списком обновленных сущностей, но UpdateModel() при передаче с исходной коллекцией ничего не обновляет. – Sergio
Как вы получаете «результаты» метода UpdateModel? – Lazarus
Предполагалось, что это автоматический процесс. Разве это не так? – Sergio