J'ai les classes de poco suivantes: et une classe de modèle de vue p> dans mon formulaire de création, j'ai défini le modèle comme p> et avoir des champs comme les éléments suivants: p> [HttpPost]
public ActionResult Create(LocationViewModel location)
{
if (ModelState.IsValid) {
locationRepository.InsertOrUpdate(location.Location);
locationRepository.Save();
return RedirectToAction("Index");
}
location.SelectPlayerTypes = golferTypeRepository.All.Where(p => p.IsActive).ToList();
return View(location);
}
10 Réponses :
Voici le problème:
[HttpPost] public ActionResult Create(LocationViewModel model)
Je ne peux pas m'empêcher de rire comment ça m'a fait ressentir la décharge pendant quelques minutes
Arrivé à moi aussi, bonne réponse!
J'ai eu une classe avec une propriété de modèle pour faire / modèle d'un véhicule. Bien sûr, mon paramètre transcuté était modèle code>. facepalm i>
Cela a sauvé ma journée. IAD Les éléments suivants: ConclusionView code> a une propriété nommée
conclusion code> donc j'ai presque perdu mon esprit. P> P>
Juste pour contribuer une autre raison possible: j'ai passé quelques heures à chercher une erreur dans mon code et que la raison du liant ne fonctionne pas dans mon cas utilisait un modèle avec des champs publics plutôt que des propriétés publiques:
public int CustomerName { get; set; }
Souhaite accordé - m'a sauvé de souffler un joint aujourd'hui. J'ai eu tous les champs et aucune propriété. Tous les liens HTML n'avaient aucun détail. Merci d'avoir ajouté cette réponse supplémentaire, @grzegorz.
Dieu, j'ai passé tellement de temps à essayer de comprendre ça! Merci!
Cette réponse a également aidé à me rappeler que les propriétés doivent être Public b>.
C'était la question dans mon cas. Merci!
Omg c'était mon problème et je cherchais cela si longtemps. Honte sur ce liant modèle, Newtonsoft peut le faire sans getter et setter :(
Permettez-moi d'ajouter ici une autre raison pour laquelle le classeur de modèle ne fonctionnerait pas correctement.
J'ai eu un modèle avec la propriété Le problème était sur le Faites attention à l'attribut J'espère que cela sauve l'heure de quelqu'un. P> Bonne chance! p> p> contact téléphone code>, quelque part sur la façon dont j'ai décidé de changer le nom de cette Propriété à
Téléphone CODE>, puis toute une liaison de modèle soudaine pour cette propriété a cessé de fonctionner lorsque j'essayais de créer une nouvelle instance. P>
Créer < / Code> Action dans mon contrôleur. J'ai utilisé l'échafaudage Visual Studio par défaut et il a créé la signature de la méthode comme suit: p>
lid code>, l'échafrogder créé. Les champs utilisant le nom d'origine
ContactTone code> et car il s'agit d'une chaîne, il n'a pas été refacturé. Comme le nouveau champ
Téléphone Code> n'était pas inclus, la valeur a été ignorée par le classeur de modèle. P>
Je sais qu'il est trop tard pour commenter cela. Ce que j'ai fait est ajouté le paramètre moins constructeur dans le point de vue et tout a fonctionné génial. P>
Également en retard pour rejoindre la fête, mais après 3 ans d'ASP.NET MVC, j'ai rencontré que les intrants handicapés ne sont pas affichés, le classeur de modèle ne peut donc pas le lier bien sûr. Voir ici : P>
"Les éléments désactivés dans un formulaire ne seront pas soumis". P> blockQuote>
Meilleure utilisation
Readonly = "Readonly" code> sur désactivé. Voir ici . P>
et une autre raison: Normalement, j'utilise les éditeurs intégrés ou les écrans pour et n'auraient jamais rencontré ce problème. Cependant, dans ce cas, j'ai besoin d'un contrôle semi-personnalisé. Fondamentalement, une descente avec de nombreux attributs de données sur les options.
Ce que je faisais, pour mon étiquette Select était: p> maintenant tout positionnait et à la œil non formé, il semblait que tout devrait fonctionner et lier. Cependant, l'assistant d'identité rend les modèles sous pression avec un soulignement. Le classeur de modèle n'interprète pas les soulignements comme indicateur de hiérarchie de classe. Ce qui devrait se séparer, c'est un point. Qui vient de namefor: p> nom pour corriger tous mes problèmes. p> p>
Juste pour réitérer ce que disait TOD, le liant modèle nécessite un attribut "nom" sur l'élément HTML pour mapper les propriétés. Je faisais un test de test rapide à la main et utilisé uniquement l'attribut «ID» pour identifier mes éléments.
Tout est tombé en place lorsque j'ai ajouté l'attribut "nom". p>
Pour que quiconque ait toujours des problèmes avec cela, si vous nommez votre paramètre dans votre méthode de poste pour être identique à l'une de vos propriétés, le modèle de modèle par défaut échouera également. P>
Le mien était un cas unie, mais j'espère que cela aide quelqu'un dans un contexte similaire. J'ai eu mon point de vue Mise en œuvre d'ivenidatableObject et la méthode de validation de cette interface renvoie une nullide si le succès. Il devait retourner un iénumérable vide. Par conséquent, la liaison était en train de se produire mais de s'écraser. P>
Fondamentalement lorsque vous obtenez ce problème, utilisez Fiddler pour examiner les données postées, assurez-vous que les variables affichées correspondent aux propriétés (non champs!) Sur votre mode de vue et mettez un point de rupture sur le constructeur de modèle d'affichage pour assurer le routage. Le moteur frappe la méthode postale correcte. Bonne chance! P>
Je pourrais être éteint, mais je pense que votre initialisation
emplacement code> dans le constructeur le jette. Pouvez-vous essayer de supprimer cette ligne (et instantirant la propriété en dehors du modèle lui-même)?
Je l'ai instancié dans la création d'ActionResult (pas le message) et maintenant, lorsque je poste, l'emplacement est null.
Oui, c'est ce que j'espérais essayer. Oh bien, suppose que ce n'était pas la question.
Lorsque vous dites que rien des propriétés ne doit être définie sur les valeurs entrées dans le formulaire - où / comment déterminez-vous cela?
J'ai mis à jour le constructeur de création pour être PublicResResult Créer (emplacementviewModel modèle, emplacement de localisation) et fonctionne.