HTML помощники для «десятичного» типа и форматирования? - PullRequest
6 голосов
/ 06 января 2011

свойство:

public decimal Cost { get; set; }

Помощник HTML:

<%: Html.TextBoxFor(m => m.Cost)%>

Вопрос: когда я устанавливаю свойство Cost, как мне отформатировать его? например показать точность в два десятичных знака?

Ответы [ 6 ]

14 голосов
/ 14 октября 2011

Я немного подправил ответ Jamiec выше, чтобы (а) сделать его компиляцией и (б) использовать те же базовые методы, что и фреймворк:

11 голосов
/ 08 января 2011

Я рекомендую DisplayFor / Editor для шаблона помощника.

// model class
public class CostModel {
  [DisplayFormat(DataFormatString = "{0:0.00}")]
  public decimal Cost {get;set;}
}

// action method
public ActionResult Cost(){
  return View(new CostModel{ Cost=12.3456})
}

// Cost view cshtml
@model CostModel

<div>@Html.DisplayFor(m=>m.Cost)</div>
<div>@Html.EditorFor(m=>m.Cost)</div>

// rendering html
<div>12.34</div>
<div><input class="text-box single-line" id="Cost" name="Cost" type="text" value="12.34" /></div>

Надеюсь, эта помощь.

10 голосов
/ 06 января 2011

Вы можете определить свой собственный метод расширения, например:

public static MvcHtmlString DecimalBoxFor<TEntity>(
            this HtmlHelper helper,
            TEntity model,
            Expression<Func<TEntity, Decimal?>> property,
            string formatString)
        {
            decimal? dec = property.Compile().Invoke(model);

            // Here you can format value as you wish
            var value = !string.IsNullOrEmpty(formatString) ? 
                              dec.Value.ToString(formatString) 
                            : dec.Value.ToString();
            var name = ExpressionParseHelper.GetPropertyPath(property);

            return helper.TextBox(name, value);
        }

И тогда использование будет:

<%Html.DecimalBoxFor(Model,m => m.Cost,"0.00")%>
3 голосов
/ 02 апреля 2013

Решение описанной проблемы довольно простое: вам просто нужно применить следующий атрибут к адресуемому свойству класса модели:

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

Где DataFormatString описывает желаемый формат отображения, а флаг ApplyFormatInEditMode указывает, что вы также хотите применить это форматирование и в редактируемом режиме (и не только в режиме только для чтения, что имеет место, если вы пропустите это ).

(См. Также Класс DisplayFormatAttribute )

0 голосов
/ 02 апреля 2011

Если использование метода For не является обязательным, вы можете просто сделать это следующим образом.

<%: Html.TextBox("Cost", Model.Cost.ToString("N2")) %>
0 голосов
/ 06 января 2011

Я не думаю, что есть способ сделать это с помощью помощника HTML, однако вы можете отправить значение для текстового поля, предварительно отформатированного с точностью до десятичного знака 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...