Получение обратной передачи из динамически созданных элементов управления в MVC без использования FormCollection - PullRequest
0 голосов
/ 03 июня 2010

Я передаю список в представление MVC и создаю флажки для каждого объекта в списке (флажки имеют имя t.Name).

Я бы хотел сказать, какие флажки былипроверяется после публикации формы.Однако я бы хотел избежать использования объекта FormCollection.Есть ли способ сделать это?

1 Ответ

1 голос
/ 03 июня 2010

Установите имя ваших флажков на что-то вроде "MyObject [" + index + "] .Checked", и для каждого флажка также поместите скрытое поле ввода с именем, например, "MyObject [" + index + "] .Name" со значением, установленным на t.Name.

Если вы называете свои поля так, связыватель модели по умолчанию может взять значения вашей формы и сопоставить их со списком объектов со свойством Name и свойством Checked.

Я бы попробовал что-то вроде следующего:

<% foreach(var t in Model)
{ %>
    <div>
        <%= Html.Hidden("MyObject[" + index + "].Name", t.Name, new { id = "MyObject_" + index + "_Name" }) %>
        <%= Html.Checkbox("MyObject[" + index + "].Checked", false, new { id = "MyObject_" + index + "_Checked" }) %>
    </div><%
} %>

Я использую анонимный тип со свойством id, чтобы компоненты инфраструктуры MVC не генерировали элементы HTML с недопустимыми значениями id, но это на самом деле не нужно.

Ваше действие при обработке сообщения будет выглядеть примерно так:

[HttpPost]
ActionResult MyAction(IList<MyObject> objects)
{
    foreach (MyObject obj in objects)
    {
        if (obj.Checked)
        {
            // ...
        }
        else
        {
            // ...
        }
    }

    return View();
}
...