2013-08-05 1 views
0

j'ai une classe nommée "AirLineSession":@ Html.HiddenFor() à 3 mvc ne passe pas de données au contrôleur

public ExtendedList listCo { get; set; } 
    public ExtendedList listBa { get; set; } 

    public bool SortbyRating { get; set; } 
    public AirLineSession() 
    { 
     listCo = new ExtendedList(); 
     listBa = new ExtendedList(); 
    } 

À mon avis, j'ai:

@Html.HiddenFor(m => m.listBa) 
@Html.HiddenFor(m => m.listCo) 
@Html.DropDownListFor(a => a.SortbyRating, new[] { new SelectListItem { Text = "Sort by rating", Value = "true" }, new SelectListItem { Text = "Sort by frice", Value = "false" } }) 

Quand je Au sommet de cette vue, seules les données de SortByRating sont passées au modèle dans Controller, listBa et listCo ne sont pas transmises. Je ne sais pas pourquoi.
N'importe qui m'aide, merci.

+0

Pourriez-vous poster le code de la classe 'ExtendedList'? La raison en est que asp.net mvc ne sait pas comment créer tous les Hiddens pour le type complexe 'ExtendedList'. Dans ce cas, vous devez ajouter des hiddens pour chaque champ d'objet et de collection. –

+0

Avez-vous essayé d'utiliser FormCollection comme 2ème argument et essayez de vérifier cet argument pour les clés et les valeurs ??? –

+1

Html.HiddenFor ne peut "stocker" que les types de base par défaut (c'est-à-dire chaîne, entier, décimal, énumération, etc.). Il ne peut pas contenir de classes complexes et, du point de vue de la ExtendedList, vous avez une classe. – Jakub

Répondre

0

Pourriez-vous poster le code de la classe ExtendedList? La raison en est que asp.net mvc ne sait pas comment créer tous les Hiddens pour le type complexe ExtendedList. Dans ce cas, vous devez ajouter hiddens pour chaque champ d'objet et collection pour les collections, pour l'échantillon:

@for(var i = 0; i < Model.listCo.Lenght; i++) 
{ 
    @Html.HiddenFor(model => model.listCo[i].Property1) 
    @Html.HiddenFor(model => model.listCo[i].Property2) 
    @Html.HiddenFor(model => model.listCo[i].Property3) 
} 

Et aussi:

@for(var i = 0; i < Model.listBa.Lenght; i++) 
{ 
    @Html.HiddenFor(model => model.listBa[i].Property1) 
    @Html.HiddenFor(model => model.listBa[i].Property2) 
    @Html.HiddenFor(model => model.listBa[i].Property3) 
} 
0

Si vous utilisez Pour ended aides html, assurez-vous vous avez transmis leurs valeurs par modèle à la vue correspondante. Mais sinon, vous devriez mettre des valeurs à certains outils dynamiques comme ViewBag et ensuite utiliser le code suivant:

@Html.Hidden("listBa", ViewBag.listba) 
@Html.Hidden("listCo", ViewBag.listco) 
Questions connexes