Мое представление отображает ряд строк в HTML-таблице. Строки упорядочены в порядке ранжирования из базы данных. Одним из столбцов в html-таблице является текстовое поле, которое позволит пользователю изменять этот порядок ранжирования. Внизу таблицы есть кнопка «Обновить», которая позволит пользователю сохранить этот новый заказ. Проблема, с которой я сталкиваюсь, состоит в том, что порядок ранжирования корректно обновляется в базе данных, но когда контроллер возвращается к представлению, все данные корректно обновляются на экране, но значения в текстовом поле не обновляются.
Order | Data
================================================
10 | Item 1
20 | Item 2
30 | Item 3
Lets say the user makes the following changes
Order | Data
================================================
50 | Item 1
20 | Item 2
10 | Item 3
Now User hits update and what is rendered is:
Order | Data
================================================
50 | Item 3
20 | Item 2
10 | Item 1
(Note data was sorted correctly but values of TextBoxFor did not update)
Код моего просмотра
@using (Html.BeginForm("UpdateRanks", "MyController")) {
<table cellpadding="0" cellspacing="0" width="100%">
@for (int i = 0; i < Model.DbSelections.Count; i++) {
var item = Model.DbSelections[i];
<tr>
<td>
@Html.TextBoxFor(m => m.DbSelections[i].Rank, new { @class = "NarrowTextBox" })
</td>
<td>
@Model.DbSelections[i].Rank (works!), @item.ItemName<br />
</td>
</tr>
}
<input type="submit" value="Update" name="updateaction" class="StandardButton"/>
</table>
}
Код контроллера:
[HttpPost]
[MultiButton(MatchFormKey = "updateaction", MatchFormValue = "Update")]
public ActionResult UpdateRanks(MyViewModel model) {
if (ModelState.IsValid) {
MyRepository myRepo = new MyRepository();
<!-- saves updated ranks to database - it works -->
myRepo.UpdateAutoPicks(...);
<!-- after saved ranks above, now reload data including ranks from database -->
<!-- debugging shows that data and ranks and ordering is correct->
model.DbSelections = myRepo.GetItems();
return View("Index", model);
} else {
<!-- blah -->
}
return View("Index", model);
}