2012-06-11 32 views
9

¿Existe alguna manera de que pueda usar el atributo DisplayFormat en una propiedad de modelo de vista para aplicar un formato DataFormatString para un número de seguridad social o un número de teléfono? Sé que podría hacer esto con javascript, pero preferiría que el modelo lo maneje, si es posible.DisplayFormat.DataFormatString para un número de teléfono o de seguridad social

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "???????")] 
public string Ssn { get; set; } 

Respuesta

12

Lo siguiente debería funcionar, sin embargo, tenga en cuenta la diferencia de tipo para la propiedad Ssn.

[DisplayFormat(DataFormatString = "{0:###-###-####}")] 
public long Phone { get; set; } 

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:###-##-####}")] 
public long Ssn { get; set; } 

Tenga en cuenta, que para que el formato que se aplicará usted tendría que utilizar la siguiente ayuda HTML en su opinión:

@Html.DisplayFor(m => m.Property) 
+2

Hmm, voy a perder el tiempo con esto, pero ambos Teléfono y SSN se almacenan como VARCHAR en mi base de datos, así que tendré que hacer un pequeño trabajo de pies para configurar esas propiedades como 'largo'. No hay forma de hacerlo con las propiedades tipeadas como 'cadena'? –

+1

Una opción sería configurar un modelo de vista con propiedades de tipo long y las anotaciones de datos relacionadas y simplemente convertir el tipo entre su entidad de dominio y modelo de vista: Convert.ToInt64 ("123456789") – Jesse

+2

lol ... downvotes de amor en respuestas que tienen más de un año de antigüedad sin comentarios correspondientes ... – Jesse

0

La respuesta aceptada es grande si el tipo es un número entero, pero una gran cantidad de identificadores terminan siendo escritos como una cadena para evitar perder ceros a la izquierda. Puede formatear una cadena dividiéndola en pedazos con Substring y hacerla reutilizable pegándola en una plantilla de pantalla.

Dentro /Shared/DisplayTemplates/, añadir una plantilla llamada Phone.vbhtml:

@ModelType String 
@If Not IsNothing(Model) AndAlso Model.Length = 10 Then 
    @<span>@String.Format("({0}) {1}-{2}", 
       Model.Substring(0, 3), 
       Model.Substring(3, 3), 
       Model.Substring(6, 4))</span> 
Else 
    @Model 
End If 

puede invocar esto en un par de maneras:

  1. solamente anote la propiedad de su modelo con un tipo de datos de la misma nombre:

    <DataType("Phone")> _ 
    Public Property Phone As String 
    

    Y luego llamar usando un simple DisplayFor:

    @Html.DisplayFor(Function(model) model.Phone) 
    
  2. Alternativamente, se puede especificar el DisplayTemplate desea utilizar por su nombre:

    @Html.DisplayFor(Function(model) model.VimsOrg.Phone, "Phone") 
    
Cuestiones relacionadas