2012-05-24 9 views
29

Próbuję sformatować pole tekstowe Html.EditorFor do formatowania waluty, próbuję oprzeć to na tym wątku String.Format for currency on a TextBoxFor. Jednak mój tekst nadal wyświetla się jako 0,00 bez formatowania waluty.Formatowanie waluty MVC

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

Jest to kod za to, co robię, i tu jest html dla tej dziedzinie w witrynie sama zawartego w div redaktor pola oczywiście.

<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"> 

Każda pomoc będzie doceniona, dzięki!

Odpowiedz

65

Można udekorować swój GoalAmount modelu widoku właściwość z atrybutem [DisplayFormat]:

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

iw widoku prosto:

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

Drugi argument pomocnika EditorFor nie robi w ogóle co myślisz, że to robi. Umożliwia przekazanie dodatkowych danych ViewData do szablonu edytora, nie jest to htmlAttributes.

Inną możliwością jest napisanie własnego szablonu edytora dla waluty (~/Views/Shared/EditorTemplates/Currency.cshtml):

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

a następnie:

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

lub użyj [UIHint]:

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

, a następnie:

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

działało świetnie, dzięki! :) –

+0

Jaki jest ciąg formatu waluty (funty) bez pensów? Nie mogę tego znaleźć. Dzięki. – Doomsknight

+1

@Doomsknight, czy próbowałeś '" {0: C0} "'? –