2011-11-23 17 views
5

Necesito ayuda para representar un modelo complejo.MVC3 - modelo complejo, las propiedades tienen el mismo nombre de campo, no se puede representar el modelo

Tengo un modelo complejo con 2 propiedades de clase. Las 3 clases (AddProjectQnrModel, ProjectModel, QTModel) tienen propiedades GroupId y GroupName.

public class AddProjectQnrModel 
    { 
     [Required] 
     public int GroupId { get; set; } 

     public string GroupName { get; set; } 

     public ProjectModel Project { get; set; } 

     public QCTModel QCT { get; set; } 
    } 

En la vista que estoy usando las plantillas del editor:

@Html.EditorFor(x => x.Project, "_EditProject.cshtml") 
@Html.EditorFor(x => x.QCT, "_QCT-v1.cshtml") 

no puedo utilizar @ html.Partial ya que no se unirá a las propiedades correctamente, por lo que tienen que utilizar las plantillas de edición.

Al ejecutar el proyecto me sale este error:

Validation type names in unobtrusive client validation rules must be unique. The following validation type was seen more than once: required

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: Validation type names in unobtrusive client validation rules must be unique. The following validation type was seen more than once: required

Source Error: 

Line 26: 
Line 27:   @Html.EditorFor(x => x.Project, "_EditProject.cshtml") 
Line 28: 
Line 29:   

Respuesta

6

Creo que le han acabado en algo similar a this issue.

MVC añadirá automáticamente una validación Requerido para GroupId porque int no es un tipo anulable. Cuando agrega una especificación explícita de [Required], la validación se duplica y resulta en su error. Elimine el atributo explícito [Required] para cualquier propiedad que no sea anulable y las cosas funcionen como espera.

Alternativamente, si desea evitar la generación automática a favor de las declaraciones explícitas [Required], se puede añadir lo siguiente a Application_Start como se ve en esta previous answer:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false 
Cuestiones relacionadas