Внимание: этому вопросу больше девяти лет!
Ваш лучший вариант - искать новые вопросы или искать ответы ниже, чтобы найти вашу конкретную версию 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.
Но мои объекты не созданы для этого; Значит ли это, что это единственный путь? Есть ли другой способ сделать это?