2012-05-24 4 views
29

Я пытаюсь отформатировать текстовое поле Html.EditorFor для форматирования валюты, я пытаюсь сфокусировать его на этой теме String.Format for currency on a TextBoxFor. Однако мой текст по-прежнему отображается как 0,00 без форматирования валюты.Форматирование валюты MVC

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

Существует код для того, что я делаю, и вот HTML для этого поля на веб-сайте сам содержащемуся в редактор поля DIV конечно.

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

Любая помощь будет оценена, спасибо!

ответ

65

Вы можете украсить свой GoalAmount вид свойств модели с [DisplayFormat] атрибута:

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

и с точки зрения просто:

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

Второй аргумент помощника EditorFor не делает вообще что вы думаете. Он позволяет передавать дополнительные ViewData в шаблон редактора, это не htmlAttributes.

Другая возможность состоит в том, чтобы написать пользовательский шаблон редактор для валюты (~/Views/Shared/EditorTemplates/Currency.cshtml):

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

, а затем:

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

или использовать [UIHint]:

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

, а затем:

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

работал отлично, спасибо! :) –

+0

Какая строка формата для валюты (фунтов) без пенсов? Кажется, я не могу найти его. Благодарю. – Doomsknight

+1

@Doomsknight, вы пробовали '' {0: C0} "'? –