CheckBoxFor n'est pas délimité lorsqu'une propriété est définie dans un objet imbriqué dans le modèle?CheckboxPour ne pas lier avec des objets imbriqués
Voici un exemple. J'ai un modèle SearchOptions
qui contient une propriété List<Star>
. Chaque Star
a un numéro, un nom et une propriété bool
qui devrait être limitée:
public class SearchOptions
{
public SearchOptions()
{
// Default values
Stars = new List<Star>()
{
new Star() {Number=1, Name=Resources.Home.Index.Star1,
IsSelected=false},
new Star() {Number=2, Name=Resources.Home.Index.Star2,
IsSelected=false},
new Star() {Number=3, Name=Resources.Home.Index.Star3,
IsSelected=true},
new Star() {Number=4, Name=Resources.Home.Index.Star4,
IsSelected=true},
new Star() {Number=5, Name=Resources.Home.Index.Star5,
IsSelected=true},
};
}
public List<Star> Stars { get; set; }
}
À mon avis fortement typé (de SearchOptions
) boucle i sur Stars
propriété:
@using (Html.BeginForm("Do", "Home"))
{
<fieldset>
<legend>@MVC3TestApplication.Resources.Home.Index.Search</legend>
@{
foreach (Star s in Model.Stars)
{
@Html.CheckBoxFor(m => s.IsSelected)
<label>@s.Name</label>
}}
</fieldset>
<input type=submit value="Invia" />
}
La (partie pertinente de) contrôleur est:
public ActionResult SearchOptions()
{
return View(new SearchOptions());
}
[HttpPost]
public ActionResult Do(SearchOptions s)
{
// Do some stuff
return View("SearchOptions", s);
}
Votre code a l'air bien - Qu'est-ce qui est réellement faux? Passez-vous dans le modèle via 'View (model)'? – Buildstarted
'Do (SearchOptions s)' montre que 's' a des valeurs anciennes (par défaut), même si je coche/décoche toutes les cases à cocher. Merci de votre aide, – gremo
Ah. Dans ce cas, la raison en est à cause des propriétés imbriquées. La sortie de 'CheckBoxFor()' définit ses valeurs de nom à 's.IsSelected' plutôt que' Model.Star []. IsSelected'. Je vais voir ce que je peux faire ou quelqu'un d'autre va poster la réponse avant moi :) – Buildstarted