2010-06-17 5 views
0

J'ai une vue partielle fortement typée nommée "Adresse". Cette vue partielle contient des champs 'input' associés à une classe de modèle Adress. Je veux le rendre deux fois dans la même vue parce que l'utilisateur doit entrer l'adresse de l'entreprise et l'adresse de livraison.MVC utilisant la même vue partielle deux fois dans la même vue

J'ai un problème avec la validation du client car l'ID de l'entrée n'est pas unique.

En outre, j'ai utilisé le DataAnnotationModelBinder pour obtenir le modèle sur un httppost. Je ne peux pas obtenir l'objet deux adresse en raison de noms conflictuels dans le Request.Forms.

Existe-t-il un moyen de définir un type d'étendue de sorte que l'identifiant de 'l'entrée' pour chaque vue partielle possède un identifiant unique qui peut être reconnu par le modelBinder?

Répondre

1

Je ne suis pas shure sur le problème de la validation et l'annotation de données, mais généralement vous pouvez travailler avec partials Muliple comme ceci:

  • construire un viewmodel qui regroupe les 2 adresses. Disons que c'est AddressViewData qui a des propriétés publiques BusinessAddress et DeliveryAddress. Les deux sont de type Address. L'adresse a une propriété supplémentaire "InstanceName". Vous remplissez le InstanceName avec "BusinessAddress" et "DeliveryAddress"

  • le dans le RenderPartial d'appel de vue ("Adresse", Model.BusinessAddress) et RenderPartial ("Adresse", Model.DeliveryAddress)

  • dans le partials utilisent someting comme celui-ci

    Html.TextBox (Model.InstanceName + ".Street")

Le résultat est un formElement qui a un attribut de nom comme celui-ci "BusinessAddress.Street" DefaultModelbinder le liera correctement. Votre action doit utiliser le paramètre

public ViewResult CreateAddress(AddressViewData addresData) 
Questions connexes