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