2011-03-28 61 views
7

Estoy trabajando en una aplicación MVC2.números separados por coma con asp.net mvc

Uso las anotaciones de datos para validar datos (tanto del lado del cliente como del servidor). Tengo varios campos en mi modelo que solo permiten valores decimales. Tan pronto como un usuario escribe valores decimales, quiero que se convierta en formato separable por comas separado. Por ejemplo, 1200 debe formatearse a 1,200 mientras que 500 debe permanecer como está.

Aquí es mi modelo:

public virtual GrossFee? Fee { get; set; } 

Y aquí es cómo se está en la vista:

%: Html.TextBoxFor(model => model.GrossFee)%> 

Todas las ideas con respecto a este serán muy apreciados.

Gracias!

+1

Para la comprobación del lado del cliente puro esta respuesta: http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

Respuesta

9

En lugar de la Html.TextBoxFor puede utilizar el Html.EditorFor y tienen la vista respetar las anotaciones de datos de la siguiente manera:

Modelo:

(No sé qué es GrossFee?, pero supongamos que es un decimal)

[DisplayFormat(DataFormatString = "{0:0,0}")] 
public virtual Decimal? Fee { get; set; } 

Vista:

Html.EditorFor(model => model.GrossFee) 

También puede ser necesario ajustar la HtmlEncode y ApplyFormatInEditMode para adaptarse a su aplicación particular.

Cualquier cosa que convierta el contenido del cuadro de texto en números agrupados por comas tan pronto como se ingrese (es decir, antes de la publicación posterior) tendría que estar basado en JavaScript.

+0

Muchas gracias por su sugerencia. Intenté como usted lo mencionó y muestra el valor de la tarifa bruta de la manera que quiero. [DisplayFormat (DataFormatString = "{0: 0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] decimal público GrossFee {get; conjunto; } Pero cuando el formulario se devuelve a sí mismo, el ModelState.IsValid es falso y se queja de que el valor de la tarifa bruta no está en el formato correcto. Por cierto tengo la validación del lado del cliente establecida en verdadero y tengo un control ValidateMessageFor para cada campo. Gracias una tonelada. – user629161

+0

Esto es probablemente porque los valores ahora tienen comas en ellos y su validador espera un número directo.Si la cosa de la coma es importante, deberá considerar los validadores personalizados o eliminarlos antes de enviarlos en la publicación del formulario. –

+2

Aquí está la solución "oficial" para modelar decimales vinculantes con comas. http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – Ryan

0

Usted debe ser capaz de utilizar un formato dentro toString

var foo = 1200.2; 
var bob = foo.ToString("#,###.00##"); 
+0

Quiero que lo haga dinámicamente en el lado del cliente como si Ingresé 1200 en el texto cuadro y tan pronto como el cuadro de texto pierde el foco, debe formatear la cadena a "#, ###. ##". – user629161

3
[DisplayFormat(DataFormatString = "{0:n}")] 
public virtual GrossFee? Fee { get; set; } 

esperanza de que esto le puede ayudar a

4
drPastDateDetail[strMS] = decValue.ToString(); 

En lugar de la línea anterior, si desea mostrar el valor numérico con una coma, el siguiente código ayudará You-

String Test = String.Format("{0:#,#.##}",decValue); 
drPastDateDetail[strMS]=Test; 
Cuestiones relacionadas