Я последовал предложению в этом вопросе ...
[Как обрабатывать флажки в формах ASP.NET MVC?
... установить несколько флажков с одинаковым атрибутом name = "...", и форма будет вести себя так, как ожидалось, в ПЕРВЫЙ раз, когда она была отправлена. При последующих отправках формы используется исходный массив значений Guid вместо правильной отправки нового массива значений отмеченных элементов.
Соответствующий код в представлении ...
<% foreach (ItemType itemType in ViewData.Model.ItemTypes) %>
<%{ %>
<li>
<input id = "selectedItems" name = "selectedItems" type = "checkbox" value = "<%= itemType.Id%>" />
<%= itemType.Description %></li>
<%} %>
Это создает серию флажков, по одному для каждого элемента с атрибутом value = "...", установленным на Id элемента.
Тогда в моем действии контроллера подпись метода ...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{...}
При первом использовании метода массив selectedItems правильно содержит Guid каждого выбранного элемента. Но при последующих отправках формы всегда по-прежнему будет содержать то, что было сначала выбрано в первоначальном действии отправки, независимо от того, какие изменения вы вносите в то, что было проверено перед отправкой формы. Похоже, это не имеет ничего общего с моим кодом, поскольку проверка массива selectedItems, который фреймворк MVC передает методу, свидетельствует о том, что фреймворк, кажется, всегда отправляет одно и то же значение снова и снова.
Закройте браузер, запустите снова, установите другой начальный флажок при отправке, и процесс начнется заново (идентификаторы изначально выбранных флажков - это всегда, что указано в аргументе selectedItems).
Предположим, я должен быть толстым и упускать из виду какое-то кеширование значений формы фреймворком, но я готов поклясться, что в Preview 5 это не так.
Сводит меня с ума и наверное простой вопрос; есть идеи????





FWIW, вот что я делаю (не уверен, связано ли это):
// please MS, stop screwing around!!!!!!!!!!!!!!!
string r = Request.Form["r"];
Затем перейдите к извлечению значений вручную из r. Я все еще использую Preview 4, так как они действительно сломали слишком много существующих функций и не исправили ошибки, о которых сообщалось.
Кстати, этот фрагмент взят прямо из моего кода :) Я думаю, что они сломали его после Preview 3.
Я не уверен, что вызывает вашу проблему, но у меня WAG ...
Используете ли вы RedirectToAction в методе Post вашего контроллера?
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{
/* lol snip */
return RedirectToAction("WhateverActionIsTheGetVersionOfThisPostAction");
}
Это может послужить для сброса всего, что происходит в фоновом режиме ... Опять же, дикая догадка ...
Уилл: Да, я делаю это; тот же результат. Кроме того, догадываясь, я установил действие публикации формы на метод полностью diff (а не на подход с фильтром действий AcceptVerbs) и получил те же результаты. К сожалению, замешательство продолжается.
Это действительно ошибка в версии BETA1. (Грубо) иду с Guid [] selectedItems = Request.Form ["selectedItems"]. Split (...), как бы уродливо это ни выглядело для меня в re: без использования инструментов, которые фреймворк должен предоставить мне, чтобы сделать это код сантехники не нужен :(