Formatul valutar MVC

Încerc să formatez un casetă text Html.EditorFor pentru a avea formatare în valută, încerc să-l bazez pe acest thread String.Format pentru valuta pe TextBoxFor . Cu toate acestea, textul meu continuă să apară până la 0,00 fără formatarea valutei.

<div class="editor-field">
        @Html.EditorFor(model => model.Project.GoalAmount, new { @class = "editor-     field", Value = String.Format("{0:C}", Model.Project.GoalAmount) })

There is the code for what I am doing, and here is the html for that field in the website itself contained within the editor-field div of course.

<input class="text-box single-line valid" data-val="true" 
 data-val-number="The field Goal Amount must be a number." 
 data-val-required="The Goal Amount field is required."
 id="Project_GoalAmount" name="Project.GoalAmount" type="text" value="0.00">

Any help would be appreciated, thanks!

0
adăugat editat
Vizualizări: 1

1 răspunsuri

Puteți să vă decorați proprietatea modelului de vizualizare GoalAmount cu atributul [DisplayFormat] :

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
public decimal GoalAmount { get; set; }

și în opinia pur și simplu:

@Html.EditorFor(model => model.Project.GoalAmount)

Al doilea argument al ajutorului EditorFor nu face deloc ceea ce credeți că are. Vă permite să transmiteți date suplimentare la șablon editor, nu este htmlAttributes.

O altă posibilitate este să scrieți un șablon de editor personalizat pentru valută ( ~/Views/Shared/EditorTemplates/Currency.cshtml ):

@Html.TextBox(
    "", 
    string.Format("{0:c}", ViewData.Model),
    new { @class = "text-box single-line" }
)

și apoi:

@Html.EditorFor(model => model.Project.GoalAmount, "Currency")

sau folosiți [UIHint] :

[UIHint("Currency")]
public decimal GoalAmount { get; set; }

și apoi:

@Html.EditorFor(model => model.Project.GoalAmount)
0
adăugat
A trebuit să îți arunc codul ViewData.Model la decimal după ce l-ai convertit sau l-ai parsing într-unul pentru TextBox . string.Format ("{0: c}", (zecimal) decimal.Parse (Model))))
adăugat autor The Muffin Man, sursa
A trebuit să adaug codul @model IFormattable la început. De asemenea, în aceste zile putem scrie [DataType (DataType.Currency)] în loc de UIHint
adăugat autor Christian Gollhardt, sursa
Care este șirul de formate pentru valută (kilograme) fără pence? Cant par să-l găsesc încă. Mulțumiri.
adăugat autor Doomsknight, sursa
@ DarinDimitrov Am acum! ;) Mulțumiri.
adăugat autor Doomsknight, sursa
a lucrat grozav, mulțumesc! :)
adăugat autor Ryan J, sursa
Mă bucur să văd această întrebare a ajutat destul de puțini oameni!
adăugat autor Ryan J, sursa
Acest lucru ma ajutat dar am setat ApplyFormatInEditMode = true la ApplyFormatInEditMode = false - Acest lucru oprește mesajul de validare a intrării trebuie să fie un număr, atunci când simbolul valută este prezent în caseta de text editare. - Cred că utilizatorul ar trebui să știe în ce valută lucrează - în orice mod, dacă gestionarea mai multor valute, simbolul monedei ar trebui să fie stocată cu valoarea, în caz contrar cum se știe dacă suma este în lire, dolar sau euro dacă privim bazei de date.
adăugat autor ppumkin, sursa
@Doomsknight, ați încercat "{0: C0}" ?
adăugat autor Darin Dimitrov, sursa
Se pare că trebuie să creezi un liant personalizat pentru acest scenariu - Tocmai aș face asta dacă ar trebui să suport acest scenariu. Dar l-aș scrie în așa fel încât să utilizeze atributul DisplayFormat cu care a fost decorat proprietatea modelului de vizualizare și reutilizarea aceluiași format pentru afișare și legare.
adăugat autor Darin Dimitrov, sursa
Cum facem problema în jurul valorii de câmpul valutar formatat cu legarea modelului atunci când formularul este postat? Întrucât există caractere nevalide pentru o zecimală în câmpul de formular, legarea nu umple valoarea atunci când formularul este postat. Se pare că trebuie să creezi un liant personalizat pentru acest scenariu ...
adăugat autor Mark, sursa
Mulțumesc din partea mea .. funcționează ..
adăugat autor Janty, sursa