attribut de liaison inclure et exclure la propriété avec des objets imbriqués de type complexe
Ok, c'est bizarre. Je ne peux pas utiliser BindAttribute
's Include
et Exculude
propriétés complexes de type objets imbriqués sur ASP.NET MVC.
Voici ce que j'ai fait:
C'est mon modèle:
public class FooViewModel {
public Enquiry Enquiry { get; set; }
}
public class Enquiry {
public int EnquiryId { get; set; }
public string Latitude { get; set; }
}
HTTP suivant l'action:
[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(
[Bind(Include = "Enquiry.EnquiryId")]
FooViewModel foo) {
return View(foo);
}
Vue:
@using (Html.BeginForm()) {
@Html.TextBoxFor(m => m.Enquiry.EnquiryId)
@Html.TextBoxFor(m => m.Enquiry.Latitude)
<input type="submit" value="push" />
}
Ne fonctionne pas du tout. Je peux seulement faire ce travail si je définir le BindAttribute
pour Enquiry
classe comme il est dit ici:
Comment puis-je utiliser le [Bind(Include="")] attribut complexe d'objets imbriqués?
source d'informationauteur tugberk
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez le faire fonctionner comme ça:
et de votre action:
Cela inclut uniquement les
EnquiryId
dans la liaison et de laisser leLatitude
null.Ceci étant dit, à l'aide de l'attribut Bind n'est pas quelque chose que je vous recommande. Ma recommandation est d'utiliser des modèles de vue. À l'intérieur de ces modèles de vue vous d'inclure uniquement les propriétés qui font sens pour ce point de vue particulier.
Donc tout simplement repenser les modèles de vue:
Là vous allez. Plus besoin de s'inquiéter à propos de la liaison.
À mon humble avis il y a une meilleure façon de le faire.
Essentiellement si vous disposez de plusieurs modèles dans le modèle de vue le poste de contrôleur de la signature de s contiennent les mêmes modèles, par opposition au modèle de vue.
I. E.
Et le post d'action dans le contrôleur devrait ressembler à ceci.
Tous tandis que la vue ressemble encore à ce
Gardez à l'esprit, ce formulaire sera toujours en poste la Latitude de retour (de la même façon que vous l'aviez mis en place), cependant, car il n'est pas inclus dans la liaison Comprennent chaîne d'Enquête sur le post de l'action, l'action ne sera pas accepter la nouvelle valeur de la résultante de l'Enquête. Je suggère de faire latitude soit désactivé ou n'est pas un élément de formulaire pour empêcher la publication des données.
Dans tout autre scénario, vous pouvez utiliser bind très bien, mais pour quelque raison il n'aime pas la notation par points pour les modèles complexes.
Comme une note de côté, je ne mettrais pas le lier l'attribut de la classe, car il peut causer d'autres problèmes comme le code de la réplication, et ne tient pas compte de certains scénarios où vous voudrez peut-être avoir une autre liaison.
(J'ai modifié les noms de variable un peu de clarté. Je suis également conscient de votre question est assez datée, cependant, dans la recherche de la réponse moi-même c'est le premier DONC je suis tombé sur avant d'essayer mes propres solutions et à venir à celui que j'ai posté. J'espère que cela peut aider d'autres personnes à la recherche d'une solution au même problème.)