programas - llamar atributos de otra clase c#
ConfiguraciĆ³n de atributos de una propiedad en clases parciales. (3)
En realidad, solo es posible a través de la clase de amigos, pero no es una forma recomendada. Debe mantener su validación en el modelo de vista personalizado porque a menudo necesita diferentes validaciones para diferentes vistas, pero su entidad solo puede mantener un único conjunto de atributos de validación.
Ejemplo de clase de compañero:
using System.ComponentModel.DataAnnotations;
[MetadataType(typeof(EmployeeMetadata))]
public partial class Employee
{
private class EmployeeMetadata
{
[Required]
public object Name; // Type doesn''t matter, it is just a marker
}
}
Tengo una clase de empleado generada por Entity Framework (EF).
public partial class employee
{
private string name;
public string Name
{
get{return name;}
set{ name = value;}
}
}
Ahora quiero poner un atributo requerido en la propiedad de nombre para usar en la validación de MVC3 en otra clase parcial de empleado que escribo para extender el que genera EF para que no tenga que volver a escribir mi código Si actualizo el modelo generado por EF.
Mi clase parcial escrita está en el mismo espacio de ensamblado y nombre.
public partial class employee
{
// What should I write here to add required attribute in the Name property?
}
No se puede, que yo sepa, simplemente no es factible.
Posiblemente debería ver si MVC3 tiene alguna forma de agregar atributos en otro lugar (por ejemplo, al tipo) que se relaciona con otra propiedad.
Alternativamente, podría agregar una propiedad de proxy:
[ValidationAttributesHere]
public string ValidatedName
{
get { return Name; }
set { Name = value; }
}
Otra forma de hacer esto es:
private class EmployeeMetadata
{
//the type HAS to match what your have in your Employee class
[Required]
public string Name { get; set; }
}
public partial class Employee : EmployeeMetadata
{
}
Al menos esto funcionó con Linq to SQL. Sin embargo, tuve problemas para acceder a los atributos a través de GetCustomAttributes
(incluso usando System.Attribute.GetCustomAttributes
no parecía ayudar). No obstante, MVC respetó esos atributos. Además, esto no funcionará con la herencia de las interfaces. Pasar atributos desde la interfaz solo funcionará usando el atributo de clase MetadataType
(vea la respuesta de Ladislav Mrnka ).