2012-02-23 41 views
1

所以我有一个很大的麻烦处理这个模型的ICollection的领域如何处理的ICollection <>字段

这是我的模型

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 
} 

现在我要实现它的创建Servicio一个EditorTemplate什么实际上我做到了,但问题是,在主认为,强烈键入RegisterModel我也不怎么从ICollection的<>我EditorTemplate我试着像这样通过各SERVICIO,但它不工作

@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

你有麻烦,但确切的问题是什么||您遇到错误 – MethodMan 2012-02-23 18:24:46

+0

http://stackoverflow.com/questions/4652457/asp-net-mvc-problem-with-editortemplate-for-icollectiont-mapped-to-enum已经有这个相同的帖子 – 2012-02-23 18:34:33

回答

0

更换

<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> 

@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> 
} 

这样一来,你就必须在每Model.Services每个服务编辑器(与附加标签)。

+0

-1这将生成重复元素标识符为您的控件,并且当您要将数据发布到表单(并且无效的html)时不起作用。 Imho不是一个好主意。 – Andreas 2012-02-23 18:40:27

+0

为什么不以我建议的方式做更深层次的原因。我在写这个答案时只是想到了别的东西。 – penartur 2012-02-23 19:13:22

相关问题