Вспомогательные методы html проверяют значение в ViewDataDictionary. Значение может быть либо в словаре, либо в модели, как свойство. Чтобы извлечь значение, внутренний запечатанный класс с именем ViewDataEvaluator использует PropertyDescriptor для получения значения. Затем вызывается Convert.ToString () для преобразования возвращаемого объекта в строку.
Желаемый код в действии контроллера
Действие контроллера должно заполнять только модель, а не форматировать ее (форматирование модели глобально).
Желаемый код в View
Представление может отображать текстовое поле HTML и извлекать строковое представление свойства с помощью этой строки кода:
<%=Html.TextBox(“Date”) %>
<%=Html.TextBox(“Time”) %>
<%=Html.TextBox(“UnitPrice”) %>
Привязка свойства модели к HtmlHelper.TextBox ()
Для значения текстового поля значение свойства UnitPrice из экземпляра модели преобразуется в строку. Мне нужно переопределить это поведение с моим собственным преобразованием в строку, которая для каждого свойства, а не для типа. Например, мне нужно другое строковое представление десятичное для UnitPrice и другое строковое представление десятичное для UnitQuantity.
Например, мне нужно отформатировать десятичную точность UnitPrice в зависимости от рынка.
string decimalPlaces = ViewData.Model.Precision.ToString ();
<%=Html.TextBox(“UnitPrice”, ViewData.Model.TypeName.UnitPrice.ToString("N" + decimalPlaces)) %>
2-сторонняя привязка данных, пожалуйста
Так же, как IModelBinder является Parse для каждого свойства модели, мне нужно Формат для каждого свойства, вроде Windows Forms привязка , но на основе модели вместо контроля. Это позволило бы модели совершить круговую передачу и иметь правильное форматирование. Я бы предпочел дизайн, где я мог бы переопределить форматирование по умолчанию. Кроме того, моя модель находится в отдельной сборке, поэтому атрибуты, указывающие форматер, не являются опцией.
Обратите внимание, что мне нужно форматирование, специфичное для свойства для модели, а не форматирование, специфичное для типа .