Próbuję uzyskać mój pogląd, aby opublikować listę z powrotem do akcji, ale nadal pojawia się jako null.Delegowanie do listy <modeltype> MVC3
Tak więc mój model ma listę obiektów WeightEntry.
model Ćwiczenia
public class Exercise
{
public List<WeightEntry> Entries { get; set; }
public int ExerciseID { get; set; }
public int ExerciseName { get; set; }
}
WeightEntry model
public class WeightEntry
{
public int ID { get; set; }
public int Weight { get; set; }
public int Repetition { get; set; }
}
moim zdaniem zawiera ExerciseName i forloop z WeightEntry obiektów
@model Mymvc.ViewModels.Exercise
...
<span>@Model.ExerciseName</span>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<table class="left weight-record">
<tr>
<th>Reps</th>
<th>Weight</th>
</tr>
@foreach (var item in Model.Entries)
{
<tr>
<td>
@Html.EditorFor(x => item.Repetition)
</td>
<td>
@Html.EditorFor(x => item.Weight)
</td>
</tr>
}
</table>
<input type="submit" value="Save" />
}
Kontroler Akcja (Post) Czy nic u za chwilę. Po prostu próbuję uzyskać działanie wiążące przed dodaniem kodu zapisu.
[HttpPost]
public ActionResult WeightEntry(Exercise exercise)
{
try
{
//Add code here to save and check isvalid
return View(exercise);
}
catch
{
return View(exercise);
}
}
Widziałem kilka małych sztuczek z dodaniem licznik nazw elementów formularza, wykorzystywanych w MVC2 ale zastanawiałem się, czy MVC3 było inaczej? Miałem nadzieję, że wszystko będzie dobrze się wiązało z identyfikatorem 0 lub zerowym, ale zamiast tego cała lista ma wartość zerową, gdy sprawdzam ją po wpisie formularza. Każda pomoc jest doceniana. Dzięki.
Dlaczego na odwrocie kończy się zwracanie wartości zerowej dla kolekcji? – Coops
@CodeBlend, spójrz na atrybuty 'name' pól wejściowych w wygenerowanym kodzie HTML i porównaj je w obu przypadkach. Następnie przeczytaj ["następujący artykuł"] (http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx) i zrozumiesz, dlaczego działa z 'dla' i nie działa z 'foreach'. –
Holy crap - to faktycznie zadziałało. Gdzie mam wysłać piwo? –