Modelbinding IEnumerable dans ASP.NET MVC POST?
Est-il des problèmes de modelbinding IEnumerable types pour un MVC POST?
Certaines propriétés dans mon Modèle ne sont pas liés à un poste pour une action. Semble que des propriétés du modèle, comme les chaînes de caractères sont ok, mais mon IEnumerable est ce qui n'est pas lié.
Voici un extrait de mon code:
<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.Test) %>
<% for (int i = 0; i < Model.ResponseInfo.SubsetInfo.BandAvailabilities.Count(); i++)
{%>
<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %>
<% } %>
Et voici ce que ces propriétés dans le modèle:
public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; }
public string Test { get; set; }
La vue fonctionne bien et affiche une liste de zones de texte avec les valeurs attendues. Mais le post d'Action qui obtient déclenché seulement conscient de la chaîne de Test en tant que propriété. Le modèle de l'état ne contient pas de mon IEnumerable données.
source d'informationauteur Arkiliknam
Vous devez vous connecter pour publier un commentaire.
Modèle de liaison dépend de comment html généré ressemble. pour ur scénario particulier pour lier correctement html devrait ressembler à
je n'ai pas essayé, mais je suis presque certain que l'appel à la méthode ToArray dans la boucle est de garder le système de génération de noms propres pour imbriquée entrées. Il ya quelques choses que vous pouvez faire pour remédier à cette
Tout d'abord, à votre avis, le changement du modèle de
à
de sorte que vous n'avez pas à appeler méthode ToArray dans la boucle et les noms propres sont générés pour les entrées.
Deuxièmement, faire un éditeur de modèle et de le mettre dans l'Éditeur de modèles de dossier, soit en vertu de l'actuel contrôleur ou dans le dossier partagé de l'Éditeur de modèle de dossier. Faire de ce point de vue accepter modèle de type
BandAvailabilityInfo
et le nom de ce point de vue devrait également êtreBandAvailabilityInfo
. ensuite à votre point de vue, vous n'avez qu'à remplacer la totalité de la boucle avecet le reste sera géré par le framework lui-même
Il fonctionne très bien avec le
IEnumarble
type.Je pense que le problème est le
ToArray
vous écrivez à l'intérieur de laFor
boucle. (C'est pas très efficace non plus)modifier la
for
boucle àforeach
.Voir cette excellente réponse la manière de l'atteindre.