Если бы это была проблема с MVC3, там были бы сообщения об этом, но я не могу найти ни одного.Я должен делать что-то не так.У меня есть простое представление (Index.cshtml), которое перебирает список с помощью цикла for.В каждой итерации я выводил два текстовых ввода со значениями из одного из элементов списка.
@{Html.BeginForm();}
@Html.Encode("\n")
@for (int i = 0; i < Model.SortOptions.Count; i++ )
{
@Html.TextBoxFor(m => m.SortOptions[i].ColumnName);
@Html.Encode("\n");
@Html.TextBoxFor(m => m.SortOptions[i].Direction);
@Html.Encode("\n");
}
<input type="submit" value="Submit" />
@{Html.EndForm();}
У меня есть два контроллера для представления, один для запросов GET и один для POST.Версия POST добавляет в список другие элементы, чем версия GET.Вот тут и возникает проблема. После перезагрузки страницы текстовые поля имеют то же значение, что и при загрузке страницы в GET.
Сначала я подумал, что это проблема с кэшированием, ноесли я изменю код (как показано ниже), чтобы вручную добавить текстовые входы и вставить значения в HTML, новые значения будут отправлены в браузер.
@{Html.BeginForm();}
@Html.Encode("\n")
@for (int i = 0; i < Model.SortOptions.Count; i++ )
{
var columnNameName = string.Format("SortOptions[{0}].ColumnName", i);
var columnNameID = string.Format("SortOptions_{0}__ColumnName", i);
var directionName = string.Format("SortOptions[{0}].Direction", i);
var directionID = string.Format("SortOptions_{0}__Direction", i);
<input type="hidden" name="@columnNameName" id="@columnNameID" value="@Model.SortOptions[i].ColumnName" />
<input type="hidden" name="@directionName" id="@directionID" value="@Model.SortOptions[i].Direction" />
}
<input type="submit" value="Submit" />
@{Html.EndForm();}
Я прошел через кодчтобы убедиться, что модель содержит ожидаемые значения во время их отправки в представление.Я даже проверил значения списка, шагая по коду в представлении.Кажется, он имеет правильные значения, но когда я просматриваю его в браузере, он имеет значения, которые должны соответствовать тому, когда страница ответила на запрос GET.Это проблема с шаблонами редактора?Я только начал использовать mvc3 и бритвенный двигатель, поэтому я многого не знаю.Любая помощь будет оценена.
----- ОБНОВЛЕНИЕ: ДОБАВЛЕННЫЙ КОД КОНТРОЛЛЕРА ----
[HttpGet]
public ActionResult Index()
{
var inv = new InventoryEntities();
var model = new IndexModel(inv);
model.SortOptions = new List<SortOption>();
model.SortOptions.Add(new SortOption { ColumnName = "Model", Direction = SortDirection.Ascending });
model.SortOptions.Add(new SortOption { ColumnName = "Make", Direction = SortDirection.Ascending });
//Load data
model.LoadEquipmentList();
return View(model);
}
[HttpPost]
[OutputCache(Duration = 1)]
public ActionResult Index(List<SortOption> sortOptions, SortOption sort)
{
var inv = new InventoryEntities();
var model = new IndexModel(inv);
ModelState.Remove("SortOptions");
model.SortOptions = new List<SortOption>();
model.SortOptions.Add(new SortOption { ColumnName = "Type", Direction = SortDirection.Descending });
model.SortOptions.Add(new SortOption { ColumnName = "SubType", Direction = SortDirection.Descending });
model.EquipmentList = new List<EquipmentListItem>();
model.EquipmentList.Add(new EquipmentListItem { ID = 3, AssignedTo = "Mike", Location = "Home", Make = "Ford", Model = "Pinto", Selected = false, SubType = "Car", Type = "Vehicle" });
return View(model);
}