Внимание: этот вопрос старше пяти лет!
Ваш лучший вариант - поиск новых вопросов или поиск ответов ниже в поисках вашей конкретной версии MVC, так как многие ответы здесь устарели.
Если вы нашли ответ, который работает для вашей версии, убедитесь, что ответ содержит версию MVC, которую вы используете.
(исходный вопрос начинается ниже)
Это кажется мне немного странным, но насколько я могу судить, так оно и есть.
У меня есть набор объектов, и я хочу, чтобы пользователи выбирали один или несколько из них. Это говорит мне "форму с флажками". У моих объектов нет понятия "выбранный" (они являются рудиментарным POCO, образованным десериализацией вызова wcf). Итак, я делаю следующее:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
В представлении:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
И, в контроллере, это единственный способ увидеть, какие объекты пользователь проверил:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
В первую очередь это причудливо, а во-вторых, для тех элементов, которые пользователь проверил, FormCollection перечисляет его значение как "true false", а не просто true.
Очевидно, что я что-то упускаю. Я думаю, что это построено с учетом идеи, что объекты в коллекции, которые действуют в форме html, обновляются с помощью UpdateModel()
или через ModelBinder.
Но мои объекты не настроены для этого; означает ли это, что это единственный способ? Есть ли другой способ сделать это?