MVC3 - 3 десятичных разряда по типу double с ведущим нулем

У меня есть поле для веса в Kgs (введите double или используйте что-то еще?). В режиме редактирования я хотел бы, чтобы пользователь вводил числа в тысячное место. В режиме просмотра я хотел бы, чтобы Kgs отображались как 560.250

Попытка изучить MVC3 + Razor. Желая изучить JQuery, использовать регулярные выражения, валидаторы, шаблоны представлений, модели просмотра...

"Магия" MVC, основанная на соглашениях, начинает привыкать. Смутно, какой подход к использованию.

Заранее благодарим вас за помощь.

Ответы

Ответ 1

Вы можете использовать аннотации данных в своей модели просмотра:

[DisplayFormat(DataFormatString = "{0:#,##0.000#}", ApplyFormatInEditMode = true)]
public double? Weight { get; set; }

и на ваш взгляд

@Html.EditorFor(x => x.Weight)

будет правильно форматировать значение в поле ввода.

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

@model double?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("#,##0.000#") : "")

а затем, на ваш взгляд:

@Html.EditorFor(x => x.Weight)

или если вы не хотите переопределять все шаблоны для всех двойных типов в своем приложении, вы можете поместить это в какое-то настраиваемое расположение шаблонов, например ~/Views/Shared/EditorTemplates/MyFormattedDouble.cshtml, а затем в своем представлении:

@Html.EditorFor(x => x.Weight, "MyFormattedDouble")

Лично я предпочитаю первый подход, который использует аннотации данных для управления форматом двойных значений.

Ответ 2

Чтобы отформатировать номер, просто используйте

 @string.Format("{0:0.00}", Model.Weight);

или

 @Html.DisplayFor(x => string.Format("{0:0.00}", x.Weight));
 @Html.EditorFor(x => string.Format("{0:0.00}", x.Weight));

для проверки

public class Model
{
    [Required]
    public double Weight{ get; set; }
}

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

Если пользователь помещает что-то не так (то есть не совместимо с двойным типом), MVC будет жаловаться, когда он пытается привязать к модели.

Ответ 3

его очень простая следуйте этому методу

поэтому вам нужно вставить DataFormatString = "{0: #, ## 0.000 # Kg}" только в gridview