Внимание: этому вопросу больше девяти лет!
Лучше всего искать новые вопросы или искать ответы ниже в поисках вашей конкретной версии 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 указывает свое значение как «истинно ложное», а не просто истинное.
Очевидно, я что-то упускаю. Я думаю, что это построено с учетом того, что объекты в коллекции, которые используются в html-форме, обновляются с помощью UpdateModel() или с помощью ModelBinder.
Но мои объекты не настроены для этого; означает ли это, что это единственный способ? Есть другой способ сделать это?