Застереження: цьому питанню більше дев'яти років!
Ваш найкращий варіант - пошук нових питань або пошук відповідей нижче, шукаючи вашу конкретну версію 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.
Але мої об’єкти для цього не створені; це означає, що це єдиний спосіб? Чи є інший спосіб це зробити?