unidad truncar redondeo redondear profe números numeros numero negativos ejercicios decimales como aproximación aproximacion asp.net-mvc asp.net-mvc-3 razor

asp.net mvc - truncar - MVC3 Decimal truncado a 2 decimales en la edición



truncar a la unidad (3)

Estoy ejecutando MVC3 con Razor y noté que los valores decimales se truncan a 2 decimales cuando está en modo de edición. Me las he arreglado para anotar mi propiedad con un formato de visualización. Esto no parece una solución muy buena ya que tendré que acordarme de hacer esto para cada nueva vista que genere (o actualizo mis plantillas).

He comprobado el valor devuelto por nuestro servicio al controlador y es correcto en 1.144, pero cuando está vinculado a la vista sale como 1.14 en el TextBox

Propiedad ViewModel

[Required] [Display(Name = "Unit Price")] public decimal UnitPrice { get; set; }

Código .cshtml

@Html.LabelFor(model => model.UnitPrice) @Html.EditorFor(model => model.UnitPrice) @Html.ValidationMessageFor(model => model.UnitPrice)

Si decorar la propiedad con lo siguiente, entonces funciona.

[DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:0.00###########################}", NullDisplayText = "")]

¿Algunas ideas?


Así es como se define la plantilla del editor Decimal por defecto:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <script runat="server"> private object ModelValue { get { if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model) { return String.Format( System.Globalization.CultureInfo.CurrentCulture, "{0:0.00}", ViewData.ModelMetadata.Model ); } return ViewData.TemplateInfo.FormattedModelValue; } } </script> <%= Html.TextBox("", ModelValue, new { @class = "text-box single-line" }) %>

Observe el formato {0:0.00} .

Entonces tienes dos posibilidades:

  1. Use el double lugar del decimal como tipo en su modelo
  2. Modifique la plantilla del editor por defecto creando un ~/Views/Shared/EditorTemplates/Decimal.cshtml que podría verse así:

    @Html.TextBox( "", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" } )

Probablemente también desee modificar la plantilla de visualización.


OMI, este artículo tiene una mejor opción:

html-editorfor-with-3-decimal-places

Usé este código para mostrar hasta 4 dígitos decimales en mi EditFor:

[Display(Name = "Discount Percentage")] [Range(0, 100.0)] [DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)] public Decimal? DiscountPercent { get; set; }


Si no necesita la funcionalidad de ''EditorFor'' HtmlHelper, simplemente puede cambiarla por ''TextBoxFor'' y no debe truncar su valor decimal ...