2012-02-23 2 views
1

j'ai donc une grande difficulté si le champ ICollection sur ce modèleComment gérer le terrain ICollection <>

Ceci est mon modèle

public class RegisterModel 
{ 
    public RegisterModel() 
    { 
     this.Servicios = new HashSet<Servicio>(); 
    } 

    [Required(ErrorMessage="El nombre de usuario es requerido.")] 
    [Display(Name = "Usuario")] 
    public string UserName { get; set; } 

    //[Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required(ErrorMessage = "La contraseña es obligatoria.")] 
    [StringLength(100, ErrorMessage = "El {0} debe tener al menos {2} caracteres de longitud.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Contraseña")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirmar contraseña.")] 
    [Compare("Password", ErrorMessage = "La contraseña y la confirmacion no coinciden.")] 
    public string ConfirmPassword { get; set; } 

    [Required(ErrorMessage="Seleccione los servicios que desea agregar al usuario")] 
    [Display(Name="Servicio")] 
    public ICollection<Servicio> Servicios { get; set; } //This field 
} 

Maintenant, ce que je veux réaliser est de créer un EditorTemplate pour Servicio qui en fait je l'ai fait, mais le problème c'est que dans la vue principale qui est fortement type pour RegisterModel Je ne sais pas comment passer chaque Servicio de l'ICollection <> à mon EditorTemplate J'ai essayé comme ceci mais cela ne fonctionne pas

@model SodexoSAT.Models.RegisterModel 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true, "No se Pudo crear la cuenta. Por favor corrija los errores e inténtelo de nuevo.") 
<div> 
    <fieldset> 
     <legend>Información de la cuenta</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(m => m.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(m => m.UserName) 
      @Html.ValidationMessageFor(m => m.UserName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(m => m.Password) 
     </div> 
     <div class="editor-field"> 
      @Html.PasswordFor(m => m.Password) 
      @Html.ValidationMessageFor(m => m.Password) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(m => m.ConfirmPassword) 
     </div> 
     <div class="editor-field"> 
      @Html.PasswordFor(m => m.ConfirmPassword) 
      @Html.ValidationMessageFor(m => m.ConfirmPassword) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(m => m.Servicios) 
     </div> 
     <div class="editor-field"> 
      <div> 
       @Html.EditorFor(m => Model.Servicios) <--doesn't work 
       @Html.EditorForModel(m => Model.Servicios) <--doesn't work 
       @Html.EditorForModel(Model.Servicios) <--doesn't work too 
      </div> 
     </div> 

     <p> 
      <input type="submit" value="Crear Usuario" class="botonAtento" /> 
     </p> 
    </fieldset> 
</div> 

}

+0

vous avez des problèmes mais quel est le problème exact || Erreur que vous rencontrez – MethodMan

+0

http://stackoverflow.com/questions/4652457/asp-net-mvc-problem-with-editortemplate-for-icollectiont-mapped-to-enum a déjà ce même poste –

Répondre

0

Remplacer

<div class="editor-label"> 
     @Html.LabelFor(m => m.Servicios) 
    </div> 
    <div class="editor-field"> 
     <div> 
      @Html.EditorFor(m => Model.Servicios) <--doesn't work 
      @Html.EditorForModel(m => Model.Servicios) <--doesn't work 
      @Html.EditorForModel(Model.Servicios) <--doesn't work too 
     </div> 
    </div> 

avec

@foreach(var service in m.Servicios) 
{ 
    <div class="editor-label"> 
     @Html.LabelFor(service) 
    </div> 
    <div class="editor-field"> 
     <div> 
      @Html.EditorFor(service) <--doesn't work 
     </div> 
    </div> 
} 

De cette façon, vous aurez l'éditeur (avec l'étiquette ci-jointe) par chaque service Model.Services.

+0

-1 Cela va générer dupliquer les identifiants d'élément pour vos contrôles et ne fonctionnera pas lorsque vous souhaitez publier les données dans un formulaire (et html invalide également). Imho pas une bonne idée. – Andreas

+0

Il y a des raisons encore plus profondes de ne pas faire comme je l'ai suggéré. J'ai juste pensé à autre chose en écrivant cette réponse. – penartur

Questions connexes