Ho una proprietà del mio modello che è di tipo double. Uno dei miei articoli ha un valore di 0,000028, ma quando viene visualizzata la mia vista di modifica, l'editor per questo valore viene visualizzato come 2.8e-005.MVC3 Editor For Double che mostra la notazione scientifica
A parte questo essere fonte di confusione per i miei utenti, fallisce anche il mio regolare convalida espressione di
[Display(Name = "Neck Dimension")]
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Neck Dimension must be a Number")]
[Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")]
[Required(ErrorMessage = "The Neck Dimension is required.")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:F20}")]
public double? NeckDimension { get; set; }
Come faccio ad avere questo campo per visualizzare? Ho questo bit di codice (mostrato sotto) che renderà un decimale come voglio, ma non sono sicuro di dove implementarlo.
var dbltest = 0.000028D;
Console.WriteLine(String.Format("{0:F20}", dbltest).TrimEnd('0'));
Uso la proprietà NeckDimension in due posizioni e modifica la visualizzazione e una visualizzazione. Ecco come vengono resi ciascuno.
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
@Html.DisplayFor(model => model.NeckHDimension)
UPDATE A quanto pare il DisplayFormat non funzionerà con TextBoxFor. Ho provato a cambiare il mio @ Html.TextBoxFor in un Html.EditorFor assegnandogli una classe, ma non è riuscito con la seguente eccezione.
The model item passed into the dictionary is of type 'System.Double', but this dictionary requires a model item of type 'System.String'
Questo vecchio codice funziona ancora:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
Questo codice ha dato l'eccezione:
@Html.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
Sembra che le mie opzioni sono risolvere questo con javascript o risolvere il problema con un editor di modelli , ma non ho il tempo di studiare e imparare la seconda opzione a questo punto.
SOLUZIONE:
ho creato un editor di modelli per il doppio? come segue.
@model double?
@{
var ti = ViewData.TemplateInfo;
var displayValue = string.Empty;
if (Model.HasValue) {
displayValue = String.Format("{0:F20}", @Model.Value).TrimEnd('0');
}
<input id="@ti.GetFullHtmlFieldId(string.Empty)" name="@ti.GetFullHtmlFieldName(string.Empty)" type="text" value="@displayValue" />
}
Mi piace l'approccio di @Darin Dimitrov sull'utilizzo del decoratore DisplayFormat, ma nel mio caso non funziona. Non sono sicuro che uno degli altri decoratori lo stia buttando via, ma ho ancora bisogno di una soluzione che funzioni. –