Uwaga: to pytanie ma ponad dziewięć lat!
Najlepszą opcją jest wyszukiwanie nowszych pytań lub wyszukiwanie poniższych odpowiedzi w poszukiwaniu konkretnej wersji MVC, ponieważ wiele odpowiedzi tutaj jest już nieaktualnych.
Jeśli znajdziesz odpowiedź, która działa dla Twojej wersji, upewnij się, że zawiera ona wersję używanego MVC.
(Oryginalne pytanie zaczyna się poniżej)
Wydaje mi się to trochę dziwne, ale o ile wiem, tak to robisz.
Mam kolekcję obiektów i chcę, aby użytkownicy wybrali jeden lub więcej z nich. To mówi do mnie „formularz z polami wyboru”. Moje obiekty nie mają pojęcia „wybranego” (są to podstawowe POCO utworzone przez deserializację wywołania wcf). Więc wykonuję następujące czynności:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
W widoku:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
I w kontrolerze to jedyny sposób, w jaki mogę zobaczyć, jakie obiekty sprawdził użytkownik:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
Jest dziwaczny, a po drugie, w przypadku elementów, które sprawdził użytkownik, FormCollection podaje jego wartość jako „prawda fałsz”, a nie tylko prawda.
Oczywiście czegoś mi brakuje. Myślę, że jest to zbudowane z myślą o tym, że obiekty w kolekcji, na które działa się w formularzu HTML, są aktualizowane przy użyciu UpdateModel()
lub za pośrednictwem ModelBinder.
Ale moje obiekty nie są do tego skonfigurowane; Czy to oznacza, że to jedyny sposób? Czy jest na to inny sposób?